我可以很好的看到为什么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语言对许多人来说是不愉快的.

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

  1. ios – 如何使用Objective C类中的多个参数调用Swift函数?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  2. ios – Swift 4添加手势:覆盖vs @objc

    我想在我的视图中添加一个手势,如下所示:但是,在Swift4中,我的编译器给出了以下错误:建议添加@objc以将此实例方法公开给Objective-C.实现此目的的另一个选项将覆盖touchesBegan()函数并使用它来处理点击.我试图以“Swift”的方式做到这一点,而不必带入Obj-C.有没有纯粹的Swift方式来添加这个轻击手势而不使用@objc?

  3. ios – 将视频分享到Facebook

    我正在编写一个简单的测试应用程序,用于将视频从iOS上传到Facebook.由于FacebookSDK的所有文档都在Objective-C中,因此我发现很难在线找到有关如何使用Swift执行此操作的示例/教程.到目前为止我有这个在我的UI上放置一个共享按钮,但它看起来已禁用,从我读到的这是因为没有内容设置,但我看不出这是怎么可能的.我的getVideoURL()函数返回一个NSURL,它肯定包含视

  4. ios – 以编程方式在Swift中添加联系人

    我想在Swift中以编程方式添加联系人.我发现了一些Objective-C示例,但我没有让它们工作,甚至在Objective-C中也没有.我不希望这涉及到AddressBookUI,因为我想从我自己的UI中获取值.解决方法这是在Swift中添加联系人的快速方法.我在我的iPhone5iOS7.1上验证了它,因为我发现模拟器并不总是与我的手机对AB的东西相同.您可以添加一个按钮并指向此方法:顺便说一下–它假设你已经分配了一个地址簿var,你可以通过覆盖viewDidAppear来打开视图.它也会执行安全提示

  5. ios – 为目标c中的方法传递未知类型的参数,可能吗?

    是否可以将未知类型的参数传递给objective-C方法?在C#中你可以写实现这一点,但我知道Objective-C没有泛型,所以有没有其他方法可以在Objective-C中实现这一点?我需要这个,因为我想创建一个方法来改变不同对象的文本颜色,如UITextField和UIButton的占位符文本.所以我的计划是创建一个名为textWhite的方法,然后在此方法中检查对象的类型,然后运行匹配的代码以使文本颜色变为白色.解决方法是的,可以传递未知类型的参数.见下面的例子.请参考使用id对象的链接作为参数Us

  6. ios – Swift指针算术和解除引用;将一些类似C的地图代码转换为Swift

    我有一点似乎没有工作的Swift代码……解决方法您正在指定locationPointer指向新位置,但仍在下一行中使用ptr,并且ptr的值尚未更改.将您的最后一行更改为:或者你可以改变指向var的指针并推进它:

  7. ios – “禁用模块时使用’@import’”错误 – 启用模块和链接框架= YES

    我有一个使用CocoaPods并使用’SCLAlertView-Objective-C’窗格的项目.该pod使用@importUIKit;模块样式导入.我在目标和项目设置中将“启用模块(C&Objective-C)”和“自动链接框架”设置为YES.当模块被禁用时,我仍然得到“使用’@import’错误.有没有什么可以阻止Xcode能够启用模块,如使用.pch文件,任何链接器标志,或者我没有提到的任

  8. XCode 6.3立即在抛出的Objective-C异常上引发SIGABRT

    考虑以下目标-C代码在XCode6.2中,它按预期工作(记录“错误消息”).但是,由于我们升级到6.3,抛出行(throwstd::logic_error…)引发SIGABRT(堆栈跟踪仅包含_cxa_throw和_pthread_kill,超出applicationdidFinishLaunchingWithOptions)并导致应用程序崩溃.这只发生在我们的应用程序中–当我将完全相同的代码复制

  9. ios – 在swift框架中使用Bridging Headers时失败

    我正在做一个快速的框架,我想使用旧的目标c类.为此,我使用桥接头方法但是当我尝试构建时出现此错误:我将我的{PROJECT}-Bridging-Header.h添加到Swift编译器中的Objective-C桥接头–代码生成我怎么解决它?

  10. XCode 3.2 Ruby和Python模板

    在xcode3.2下,我的ObjectiveCPython/Ruby项目仍然可以打开更新和编译,但是你无法创建新项目.鉴于xcode3.2中缺少ruby和python的所有痕迹(即创建项目并添加新的ruby/python文件),是否有一种简单的方法可以再次安装模板?我发现了一些关于将它们复制到某个文件夹的信息,但我似乎无法让它工作,我怀疑文件夹的位置已经改变为3.2.解决方法3.2中的应用程序模板

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部