在 Gleam 中,函式是用pub fn語法定義的。
pub fn add(x: Int, y: Int) -> Int {
x + y
}
這個函式接受兩個引數,兩者的型別都是 Int,並回傳型別為 Int 的值。Gleam 中沒有 return 關鍵字,函式中最後一個運算式的值一律會_隱式回傳_。
引數的型別標註與回傳型別都是選用的,而 Gleam 一律會對你的程式碼進行完整的型別檢查。通常 Gleam 程式設計師為了清楚起見,會為函式加上型別標註,不過你想省略也沒問題。
pub fn add(x, y) {
x + y
}
可以用function_name(argument1, argument2)語法來呼叫函式。
pub fn double(x: Int) -> Int {
// Call the add function defined above
add(x, x)
}
在 Gleam 中,變數是用let name = expression語法定義的。
pub fn main() {
let count = 1
}
變數可以加上型別標註來宣告。就像函式引數一樣,這些標註是選用的,不過大多數 Gleam 程式設計師為了簡潔,會省略變數的型別標註。
pub fn main() {
let count: Int = 1
}
在 Gleam 中,字串是用雙引號撰寫的。
pub fn greeting() {
"Hello, world!"
}
註解可以用來留下筆記,給其他閱讀原始碼的開發者參考。Gleam 的註解是單行形式,前面會加上//。
pub fn main() {
// This is a comment
let x = 1
}
在這項練習中,你將寫一些程式碼,幫助你依照最愛的食譜烤出完美的千層麵。
你有 5 個任務,全都和烤千層麵所花費的時間有關。
定義expected_minutes_in_oven函式,它不接受任何引數,並回傳千層麵應該在烤箱中待幾分鐘。根據食譜,預期的烤箱時間是 40 分鐘:
expected_minutes_in_oven()
// -> 40
定義remaining_minutes_in_oven函式,它接受千層麵已經在烤箱中的實際分鐘數作為引數,並根據前一個任務中預期的烤箱時間,回傳千層麵還需要在烤箱中待幾分鐘。
remaining_minutes_in_oven(30)
// -> 10
定義preparation_time_in_minutes函式,它接受你加到千層麵中的層數作為引數,並回傳你準備千層麵所花的分鐘數,假設每一層需要 2 分鐘準備。
preparation_time_in_minutes(2)
// -> 4
定義total_time_in_minutes函式,它接受兩個引數:第一個引數是你加到千層麵中的層數,第二個引數是千層麵已經在烤箱中的分鐘數。這個函式應該回傳你烹調千層麵總共花了幾分鐘,也就是準備時間的分鐘數,加上千層麵目前在烤箱中待的分鐘數。
total_time_in_minutes(3, 10)
// -> 16
定義alarm函式,它不接受任何引數,並回傳一則表示千層麵可以吃了的訊息。
alarm()
// -> "Ding!"