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

相關文章
相關標籤/搜索