Elm (程式語言)
閱讀設定
編程範式 | 函數式 |
---|---|
設計者 | Evan Czaplicki |
第一次出現 | 2012年3月30號[1] |
穩定版本 | 0.19.1
/ 2019年10月21號[2] |
類型系統 | 靜態、強類型、類型推論 |
軟件授權 | 寬鬆許可證(三條款BSD許可證)[3] |
副檔名 | .elm |
網站 | elm-lang |
啟發語言 | |
Haskell、Standard ML、OCaml、F# | |
影響語言 | |
Redux、[4] Vuex[5] |
Elm係一隻用喺特定領域嘅程式語言,佢透過聲明式嘅方法創建基於網頁瀏覽器嘅圖形用戶界面。Elm係純函數式嘅,開發者話呢隻語言強調易用性、性能同埋健壯性。佢宣傳佢係「實際上冇運行時間異常」[6],因為Elm編譯器係用靜態類型檢查嘅。
例子
[編輯]下面嘅例子代碼透過註釋展示咗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)
參考
[編輯]- ↑ Czaplicki, Evan. "My Thesis is Finally Complete! "Elm: Concurrent FRP for functional GUIs"". Reddit.
- ↑ https://github.com/elm/compiler/releases
- ↑ "elm/compiler". GitHub.
- ↑ "Prior Art - Redux". redux.js.org.
- ↑ "Comparison with Other Frameworks — Vue.js".
- ↑ "Elm home page".