Gleamでは、関数はpub fnという構文で定義します。
pub fn add(x: Int, y: Int) -> Int {
x + y
}
この関数はInt型の引数を2つ取り、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のコメントは、//で始まる1行のコメントです。
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
ラザニアに重ねた層の数を引数に取り、1層につき2分かかるものとして、下準備にかかった時間を分で返すpreparation_time_in_minutes関数を定義します。
preparation_time_in_minutes(2)
// -> 4
total_time_in_minutes関数を定義します。この関数は2つの引数を取ります。1つ目の引数はラザニアに重ねた層の数、2つ目の引数はラザニアをオーブンに入れておいた時間(分)です。関数は、ラザニア作りに合計で何分かかったかを返すようにします。これは、下準備にかかった時間と、その時点でラザニアをオーブンに入れておいた時間を足したものです。
total_time_in_minutes(3, 10)
// -> 16
引数を取らず、ラザニアが食べごろになったことを知らせるメッセージを返すalarm関数を定義します。
alarm()
// -> "Ding!"