任何Clojure真正闪耀着Java并不是并发/不可变性 – 功能相关的例子?

我可以很好的看到为什么Clojure真的很好的并发编程.我也可以在这方面看到FP的优点.

但是很明显,我们编写的每行代码并不是线程的一部分或需要并发访问.对于代码的那些部分(更简单和顺序的代码),Java真的错过了Clojure提供了什么?

具有像Multimethods,Dynamic binding,Destructuring bind这样的功能真的在Java中错过吗?

我认为我的问题也可以被框架为:

>如果Clojure没有
它具有的并发功能
整个不变性/可变性
那么问题不是我们关心的
Clojure提供了什么其他功能
这将使您使用它而不是
Java?

解决方法

Were features like Multimethods,Destructuring bind really missed in Java?

是.也…

>一流功能.美味的一流功能.这不只是FP的事情.人们对Java 7中的关闭有很高的理由.
>代码数据.这是任何Lisp的好处. Lisp代码不仅仅是编译器口中的文本,而是再也看不到,它是列表和向量,符号和文字的结构,可以在程序上操作.这导致强大的宏和一流的符号和许多其他的好东西.它导致高度可扩展和强大的语言.
Clojure具有更好的控制和循环结构,以及通过宏和一流功能创建自己的能力. Java已经和前进了(而且几年甚至没有进展). Clojure具有map,filter,reduce,mapcat,很多做表单,很多if和when形式,列表通过for,等等.如果这些不存在,你可以自己写.在Java中,您可以等待十年,让委员会(或许)批准这些功能.
>减少那些处理静态打字,所有功能设置为Java 7,Clojure已经有或可能有微不足道的. “自动资源管理”,Clojure已经开放. “对于集合的语言支持”,Clojure(和Ruby,Perl,Python …)已经有了. “开关串”,Clojure具有更强大的类似于condp的类似结构,以及您可以想到的其他任何事情.你可以在十几行Clojure中自己写这些.
>列表,地图,数组,集合,排序集,排序映射等的简明语法,并且几乎可以互换使用它们都得益于seq抽象.对正则表达式,字符,匿名函数等的字面支持
> Java具有强制检查异常,这是令人讨厌的; Clojure不
Java语法是冗长和不规则的. Clojure语法简洁而规则.即使使用Clojure编写的Java通常比Java编写的Java更简洁,因为像 – >和doto,并构造像代理和(很快)reify.
> Java代码具有太多的强制性样板和无休止的重复. public static void main(String [] args){…}等等.Clojure没有这个样板,而在表现力或力量方面几乎没有任何贡献.今天甚至其他静态类型的语言似乎正在推动类型推理.有一个很好的理由你需要一个庞大的以Java为中心的IDE来编写和不断地“重构”Java代码;用手写它会驱使你疯狂,并将你的手指下降到组合.
>在Java中,一切都是类或接口,无论是否应该,这是不必要的复杂性的原因.有许多程序必须被超越认可才能适应OOP风格. Clojure让你避免这种情况. A nice rant to this effect. Clojure主要集中在动词上.
>通过REPL进行交互式编程很有趣.编译/运行/调试周期不是. Clojure仍然编译为.class文件,如果你想要它;在此期间,您可以坐在代码的中间,在运行时自由修补.
> Clojure的元数据和理想的平等测试是愉快的工作.正如它自动推广int到longint,本地处理理性数字等等.
>动态打字导致比静态打字更短,更通用的更可重用的更强大的代码. (这是一个非常有争议的一点,很明显,所以我把它放在最后)

Scala和Groovy以及JRuby和Jython以及无休止的其他JVM语言(不属于Java)的受欢迎程度应该被视为一个很好的指示,即当JVM很好时,Java语言对许多人来说是不愉快的.

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...