Elm係一隻用喺特定領域程式語言,佢透過聲明式嘅方法創建基於網頁瀏覽器圖形用戶界面。Elm係純函數式嘅,開發者話呢隻語言強調易用性、性能同埋健壯性。佢宣傳佢係「實際上冇運行時間異常[6],因為Elm編譯器係用靜態類型檢查嘅。

Elm
The Elm tangram
編程範式函數式
設計者Evan Czaplicki
第一次出現2012年3月30號, 11年之前 (2012-03-30)[1]
穩定版本
0.19.1 / 2019年10月21號, 4年之前 (2019-10-21)[2]
類型系統靜態強類型類型推論
軟件授權寬鬆許可證三條款BSD許可證[3]
副檔名.elm
網站elm-lang.org
啟發語言
HaskellStandard MLOCamlF#
影響語言
Redux[4] Vuex[5]

例子 編輯

下面嘅例子代碼透過註釋展示咗Elm嘅基本特徵:

-- 呢個係一個單行註釋。

{-
呢個係一個多行註釋。
係可以 {- 括著佢嘅  -}
-}

-- 呢度係定義叫做greeting嘅一個值。類型畀人推論做String。
greeting =
    "Hello World!"

-- 喺頂層聲明最好加返個類型標註。
hello : String
hello =
    "Hi there."

-- 函數用一樣嘅方法聲明,具有跟隨喺函數名字後嘅實際參數。
add x y =
    x + y

-- 再嚟多次,最好加返個類型標註。
hypotenuse : Float -> Float -> Float hypotenuse a b =
    sqrt (a^2 + b^2)

-- 函數可以柯里化;呢度我哋柯里化乘法入面綴算符於數2以上。
multiplyBy2 : number -> number
multiplyBy2 =
     (*) 2

-- If表達式可以用喺在Bool值上嘅分支。
absoluteValue : number -> number
absoluteValue number =
    if number < 0 then negate number else number

-- 記錄用嚟持有命名字段。
book : { title : String, author : String, pages : Int }
 book =
     { title = "Steppenwolf"
     , author = "Hesse"
     , pages = 237 
     }

 -- 想要訪問記錄嘅話可以加返個 . 。
 title : String
 title =
     book.title

 -- 記錄訪問 . 都可以用嚟做一個函數。
 author : String
 author =
     .author book

 -- 可以用type關鍵字嚟建立標籤聯合。
 -- 下列值表示一個二叉樹。
 type Tree a
     = Empty
     | Node a (Tree a) (Tree a)

 -- 可以用case表達式檢測呢啲類型。
 depth : Tree a -> Int
 depth tree =
     case tree of
         Empty ->
             0

         Node value left right ->
             1 + max (depth left) (depth right)

參考 編輯

  1. Czaplicki, Evan. "My Thesis is Finally Complete! "Elm: Concurrent FRP for functional GUIs"". Reddit.
  2. https://github.com/elm/compiler/releases
  3. "elm/compiler". GitHub.
  4. "Prior Art - Redux". redux.js.org.
  5. "Comparison with Other Frameworks — Vue.js".
  6. "Elm home page".

出面網頁 編輯