第5章. 名前と束縛
この章の目的
この章を読み終える頃には、値に名前を付けられるようになり、その名前に関する大切なルールが分かるようになります。この章を読み終える頃には、値に名前を付けられるようになり、その名前に関する大切なルールが分かるようになります。
値に名前を付ける
作曲家がモチーフを書くとき、それに名前を付けます。すると楽譜の他の部分では、その音をもう一度書き出さずに、その名前を呼び戻すだけで参照できます。プログラムも値に対して同じことをします。値に名前を付けることを「束縛」と呼び、その名前そのものを「束縛」と呼びます。作曲家がモチーフを書くとき、それに名前を付けます。すると楽譜の他の部分では、その音をもう一度書き出さずに、その名前を呼び戻すだけで参照できます。プログラムも値に対して同じことをします。値に名前を付けることを「束縛」と呼び、その名前そのものを「束縛」と呼びます。
束縛はletという単語で作ります。
fn main() -> Word {
let beats_per_bar = 4;
let bars = 8;
beats_per_bar * bars
}
これをphrase.kelとして保存し、keleusma run phrase.kelで実行します。出力は次のとおりです。これをphrase.kelとして保存し、keleusma run phrase.kelで実行します。出力は次のとおりです。
32
このプログラムはbeats_per_barとbarsという2つの値に名前を付けて、最後の行で両方の名前を使っています。4分の4拍子で8小節の楽曲は32拍です。このプログラムはbeats_per_barとbarsという2つの値に名前を付けて、最後の行で両方の名前を使っています。4分の4拍子で8小節の楽曲は32拍です。
型を明示する
束縛の型は、言語が自動で推論してくれます。4は整数なので、beats_per_barはWordになります。型はコロンに続けて明示することもできます。束縛の型は、言語が自動で推論してくれます。4は整数なので、beats_per_barはWordになります。型はコロンに続けて明示することもできます。
let beats_per_bar: Word = 4;
型を明示するかどうかは任意です。値が複雑な場合や、型を書いておくと読み手にとってプログラムが分かりやすくなる場合に役立ちます。型を明示するかどうかは任意です。値が複雑な場合や、型を書いておくと読み手にとってプログラムが分かりやすくなる場合に役立ちます。
束縛は変わらない
ここで大切なルールがあります。一度値に名前が付くと、その名前はその値を持ち続けます。束縛は再代入できません。let total = 32;と書いておいて、あとからtotalを別の値にしようとすることは許されません。ここで大切なルールがあります。一度値に名前が付くと、その名前はその値を持ち続けます。束縛は再代入できません。let total = 32;と書いておいて、あとからtotalを別の値にしようとすることは許されません。
これは制限のように聞こえますし、ある一点においては確かに制限です。束縛はループが加算していく「合計用の変数」として使うことができません。なぜなら、それを使うには値を変更する必要があるからです。第8章でこの点に再び戻ります。値を実際に変更する場所は第4部で扱います。これは制限のように聞こえますし、ある一点においては確かに制限です。束縛はループが加算していく「合計用の変数」として使うことができません。なぜなら、それを使うには値を変更する必要があるからです。第8章でこの点に再び戻ります。値を実際に変更する場所は第4部で扱います。
利点は大きいです。プログラムを下の方で名前を読んだとき、その名前は付けたときに与えた値をそのまま持っています。途中で誰かが書き換えたりはしていません。読み手も、言語も、その名前を信頼できます。これは楽譜に書かれた、欄外でラベル付けされたモチーフが、楽譜の中でそのラベルが指されるたびに毎回同じ意味であるのと同じ規律です。利点は大きいです。プログラムを下の方で名前を読んだとき、その名前は付けたときに与えた値をそのまま持っています。途中で誰かが書き換えたりはしていません。読み手も、言語も、その名前を信頼できます。これは楽譜に書かれた、欄外でラベル付けされたモチーフが、楽譜の中でそのラベルが指されるたびに毎回同じ意味であるのと同じ規律です。
この章のまとめ
let name = value;で値に名前を付けます。- 型は
let name: Type = value;と明示できますが、言語が推論することもできます。型はlet name: Type = value;と明示できますが、言語が推論することもできます。 - 束縛は再代入できません。名前はその値を保ち続けます。
次の章では、文の集まりを関数にまとめます。