常數值以 name = expression 定義。在 Elm 中,除了定義之外,一切皆為運算式。
five = 5
six = 3 + 3
函式以 name parameters... = expression 定義,參數之間僅以空白分隔。
add number1 number2 = number1 + number2
呼叫函式本身也是一種運算式,做法是指定函式名稱,並為函式的每個參數傳入對應的引數,彼此以空白分隔,就跟定義函式時一樣。
five = add 2 3
括號可以用來指定運算式的求值順序。
six = add 2 (1 * 4)
twelve = add 2 1 * 4
Elm 不使用大括號、小括號或分號這類語法標記來界定程式碼的範圍,而是改用空白與縮排。
-- A function split over multiple lines, so subsequent lines must be indented
add number1 number2 =
number1 + number2
https://elmprogramming.com/indentation.html
Elm 中的每個檔案都是一個模組,而且必須在所有其他程式碼之前包含 module 敘述。模組名稱必須與檔案名稱相符,因此模組 Calculator 必須放在 Calculator.elm 這個檔案裡。模組中定義的任何東西,其作用域都是該模組私有的,除非列在 exposing 中,否則無法從這個模組外部存取。
-- Define the Calculator module, and expose the `add` function
module Calculator exposing (add)
six = 3 + 3
add number1 number2 = number1 + number2
-- Define the Calculator module, and expose everything within: `six` and `add`
module Calculator exposing (..)
six = 3 + 3
add number1 number2 = number1 + number2
https://elm-lang.org/docs/syntax#modules
註解是 Elm 檔案中不會被當成程式碼解讀的文字,主要是給你自己和其他程式設計師閱讀的。單行註解有一種輕量的語法,以雙破折號為基礎。多行註解則可以用 {- 與 -} 這對開頭與結尾的分隔符號來寫。
-- a single line comment
-- another single line comment
{- a multiline comment
spawning multiple lines
-}
這裡有一份風格指南,而 elm-format 可以用來自動格式化程式碼。
在這個練習中,你要寫一些程式碼,幫助你依照最愛的食譜做出美味的千層麵。
你有三個任務,全都和烹調千層麵所花費的時間有關喔。
定義expectedMinutesInOven來計算千層麵應該在烤箱中待幾分鐘。根據食譜,預期的烤箱時間是 40 分鐘:
expectedMinutesInOven
--> 40
定義preparationTimeInMinutes,它會接收千層麵的層數作為參數,並回傳準備千層麵需要幾分鐘,假設每一層需要 2 分鐘準備。
preparationTimeInMinutes 3
--> 6
定義elapsedTimeInMinutes函式,它接收兩個參數:第一個參數是千層麵的層數,第二個參數是千層麵已經在烤箱中待了幾分鐘。這個函式應該回傳你烹調千層麵所花的時間(分鐘),也就是準備時間(分鐘)加上當下千層麵已經待在烤箱中的時間(分鐘)的總和。
elapsedTimeInMinutes 3 20
--> 26