Elm 语言初体验

上个周末两天一直在看Elm,这是一门函数式编程语言。所谓函数式编程(Functional Programming,FP),跟面向对象编程(Object Oriented,OO)是同一种类型的概念,是一种编程模式。具体什么叫函数式编程,它有什么特征,有什么优点,这里不做具体解释。只放出一个大胆的预言,就是在将来,尤为是在Server端,将会是函数式编程的天下。
Anyway,Elm是一门函数式编程语言,它是一门静态的,强类型的语言,目前主要targeting在Web端,所以它有一个compiler能够编译成JS。
目前,编译成JS的语言已经有很是多了,如CoffeeScriptTypeScriptPureScript等等,甚至不少现有的general purpose语言如今也有了一些工具,用来把它们编译成JS,如Clojure 有ClojureScript,Scala有Scalajs,Ruby有Opal等等等等。
为何有这么多的新语言编译成JS,又有这么多工具把其它语言编译成JS呢?这些说白了其实都是想取代JS,这说明一个问题,那就是JS不够好,这个跟JVM上面有这么多语言缘由是相似的。
Elm也是出于一样的缘由,它想要发明一种全新的Web语言,用于取代JS。那在这么多语言中,Elm的优点是什么?
通过这两天的接触,我了解到它的优点有如下几个: html

  1. No Runtime Error。”Undefined is not a function” 有没有遇到过?若是你作过一段时间前端开发,你不可能没有遇到过这个问题。相似的Runtime Error还有很是多。然而,Elm声称能够完成避免Runtime Error!这绝对是无可比拟的一个优点。美国的一家公司NoRedLink声称,他们的产品上线一年多,目前遇到的Runtime Error是0个!这个仍是很是有诱惑力的。
  2. 纯粹的函数式编程,Immutable data和pure function,让你的代码变得干净,0耦合,不易出错,容易重构,易读,易测。这些都是JS界目前大力推动的方向啊,否则要immutable.js干嘛?要Ramda干嘛?要RxJs干嘛?
  3. 有一个“官方”的App architecture,这是一个很是优秀的architecture,有多优秀?Redux你们都知道,如今其实已是Web app实际上的标准architecture,然而Redux的思想实际上是从Elm的architecture学来的!

    Redux evolves the ideas of Flux, but avoids its complexity by taking cues from Elm.
    ---- redux.js.org/前端

总之,我以为这个视频里面有一句话总结得很是好,那就是Elm是如今整个JS界的发展趋势,然而JS还有很长一段路要走。react

那Elm完美的吗?固然不是,我这两天接触下来,发现它仍然处于比较年轻的状态,虽然官方声称它已经production ready,也确实有好一些公司已经用于正式的产品中。然而我相信都不是很容易的事情。目前来讲,我以为有如下几个问题须要极需改善:webpack

  1. 社区过小,这多是目前最大的问题,在国内更是如此。若是你在百度上面搜”Elm“,出来的结果基本都不是Elm语言相关的。固然这也不赖Elm,由于你在百度上搜其它东西,基本出来的结果也不是你想要的。
  2. 函数式编程与OO或过程式编程差异太大,上手真不是很容易,这会在很大的程度上影响到它的采用率。
  3. Elm语言和编译器自己也有一些东西有等完善,如目前还不支持String interpolationelm reactor(相似于webpack-dev-server)不支持hot reload,其实以前是支持的,后来发现了bug,就去掉了。Time travel debugger也是,原本是有的,后来发现有bug又去掉了。当前这些都不是很严重的问题,好比hot reload只是节省了你手动刷新页面的功力而已。然而从这些”原来有,后来发现有bug又去掉“这些事情中就能说明这个东西还不是很稳定的问题。

接下来打算在公司的内部小工具上面试用一下,由于Elm文件是能够跟JS交互的,因此应该不是太大的问题,大不了再用回JS嘛。可是函数式编程做为将来的发展趋势,仍是要了解一下的。因此,整体来讲,我以为这是一门很是值得学习的语言。git

若是你对Elm感兴趣,欢迎加微信群,共同交流。
github

(为避免二维码失效,请关注公众号从里面加入)web

相关文章
相关标签/搜索