gpt4 book ai didi

java - Clojure 真正与与并发/不变性功能无关的 Java 相比有什么例子吗?

转载 作者:搜寻专家 更新时间:2023-10-30 21:37:48 24 4
gpt4 key购买 nike

我完全明白为什么 Clojure 非常适合并发编程。在这方面,我也可以看到 FP 的优势。

但显然,并非我们编写的每一行代码都是线程的一部分或需要并发访问。对于代码的那些部分(更简单和连续的代码段),Java 真正错过了 Clojure 提供的什么?

Java 中是否真的缺少像 Multimethods、Dynamic binding、Destructuring bind 这样的特性?

我想我的问题也可以表述为:

  • 如果 Clojure 没有
    它具有的并发特性和
    整个不变性/可变性
    问题不是我们关心的,然后
    Clojure 提供的其他功能
    那会让你使用它而不是
    java ?
  • 最佳答案

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



    是的。还...
  • 一流的功能。美味一流的功能。这不仅仅是 FP 的事情。人们在 Java 7 中要求闭包是有充分理由的。
  • 代码即数据。这是任何 Lisp 的好处。 Lisp 代码不仅仅是你输入编译器口中的文本块,以后再也看不到了,它是列表、 vector 、符号和文字的结构,你可以按程序操作。这导致强大的宏和一流的符号以及许多其他好东西。它导致高度可扩展和强大的语言。
  • Clojure 具有更好的控制和循环结构,并且能够通过宏和一流的函数创建自己的结构。 Java 有 forforeachwhile (而且多年来甚至没有 foreach)。 Clojure 有 map , filter , reduce , mapcat , 很多 do表格,很多 ifwhen表单,通过 for 列出理解, 等等。如果这些不存在,您可以自己编写它们。在 Java 中,您需要等待十年才能让委员会(也许)批准此类功能。
  • 减去处理静态类型的那些,为 Java 7 设置的所有功能, Clojure 要么已经拥有,要么可能拥有。 《自动资源管理》,Clojure 有作为 with-open . “集合的语言支持”,Clojure(以及 Ruby、Perl、Python...)已经有了。 “开关中的字符串”,Clojure 具有更强大的类案例结构,如 condp ,以及其他任何你能想到的。您可以自己用十几行 Clojure 编写任何这些。
  • 列表、映射、数组、集合、排序集、排序映射等的简洁语法。感谢 seq,它们几乎可以互换使用。抽象。对正则表达式、字符、匿名函数等的字面支持
  • Java 有强制检查异常,很烦人; Clojure 没有。
  • Java 语法冗长且不规则。 Clojure 语法简洁而规范。由于像 -> 这样的宏,甚至用 Clojure 编写的 Java 通常也比用 Java 编写的 Java 更简洁。和 doto , 以及类似 proxy 的结构和(很快)reify .
  • Java 代码有太多强制性样板和无休止的重复。 public static void main(String[] args){...}等等。Clojure 几乎没有这些样板,同时在表现力或功能方面几乎没有牺牲。甚至今天的其他静态类型语言似乎也在走类型推断的道路。您有充分的理由需要一个庞大的以 Java 为中心的 IDE 来编写和无休止地“重构”Java 代码;手写会让你发疯,把你的手指磨破。
  • 在 Java 中,一切都是类或接口(interface),不管它是否应该是,这是不必要的复杂性的原因。有许多程序必须被改得面目全非才能适应 OOP 风格。 Clojure 可让您避免这种情况。 A nice rant to this effect. Clojure 主要关注动词。
  • 通过 REPL 进行交互式编程很有趣。编译/运行/调试周期不是。如果需要,Clojure 仍会编译为 .class 文件;同时,您可以坐在代码中间,在代码运行时自由地进行修改。
  • Clojure 的元数据和健全的平等测试使用起来很愉快。就像它自动将 int 提升为 long 到 Bigint,对有理数的 native 处理等一样。
  • 与静态类型相比,动态类型导致更短、更通用、更可重用、更强大的代码。 (这显然是一个很有争议的问题,所以我把它放在最后。)

  • Scala、Groovy、JRuby 和 Jython 以及无数其他非 Java 的 JVM 语言的流行应该被视为一个很好的迹象,虽然 JVM 很好,但 Java 语言对许多人来说并不愉快。

    关于java - Clojure 真正与与并发/不变性功能无关的 Java 相比有什么例子吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1864424/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com