第4章. 値と型
この章の目的
この章を読み終える頃には、Keleusmaが扱う値の種類と、それぞれが属する型の名前を知っていることになります。
型とは、意味のある値の集まり
たとえば261.6ヘルツのような周波数は小数を持つ数です。拍の数は整数です。今ある音が鳴っているかどうかは「はい・いいえ」で答えられる事柄です。これらはみな別の種類の値で、その「種類」のことを「型」と呼びます。型は、ある値にとって何が意味を持ち何が意味を持たないかを言語が判断する仕組みです。
この章は対話プロンプトを使います。keleusma replで起動して、一緒に入力してみてください。
Word, 整数
Wordは整数です。何かを数えるものはWordになります — 拍数、半音の数、MIDIナンバーなどです。
> 12
12
> 7 + 5
12
一つだけ意外な結果があります。Word同士の割り算は、余りを捨てます。
> 7 / 2
3
7を2で割ると3で余りが1ですが、余りは捨てられます。整数の割り算はいつもゼロの方向に切り捨てます。小数部分が欲しいときは、次の型に手を伸ばします。
Float, 小数を持つ数
Floatは小数部分を持てる数です。周波数はFloatです。Floatは小数点を付けて書きます。その小数点こそが、その値はWordではなくFloatであると言語に伝える印です。
> 3.5
3.5
> 7.0 / 2.0
3.5
7.0と2.0の.0に注目してください。Float同士の割り算は小数部分を保つので、7.0 / 2.0は3.5であって、3ではありません。
bool, 真と偽
boolは「はい・いいえ」の質問に対する答えです。値はちょうど2つ、trueとfalseです。比較式はboolを返します。
> 3 < 5
true
Text, 書かれた文字列
Textは書かれた文字列です。二重引用符で囲んで書きます。
> "middle C"
middle C
Unit、値がまったくないこと
Unit は () の型であり、「ユニット」と読み上げます。これは意味のある値がないことを表します。何か有用な処理を行うものの返すべきものがない関数は、() を返します。
> ()
()
後で登場するいくつかの数値型
Keleusma にはさらに3つの数値型があります。いずれも第II部では必要ないため、ここでは名前を挙げるにとどめます。
Byteは8ビットの整数であり、バイトレベルの作業に使用します。第23章で登場します。Fixedは完全に決定的で再現可能な算術を持つ小数であり、オーディオコードが毎回まったく同じ結果を生成しなければならない場面で使用します。ピアノロールがこれを使用します。Multiword<N, F>は固定幅の多倍長数値であり、幅がNワード、小数ビットがFで、単一のWordには大きすぎる値のために使用します。第23章で登場します。
型が重要である理由
Keleusma プログラム内のすべての値には型があり、言語はプログラムが実行される前に、値がその型が意味をなす場所でのみ使用されていることを検査します。拍数を期待する関数に周波数を渡すと、その検査の時点で捕捉され、後になって誤った音として発覚することはありません。型はプログラム全体の下に張られた安全網です。
この章のまとめ
Wordは整数であり、整数の除算は余りを切り捨てます。Floatは小数点を用いて書かれる小数です。boolはtrueまたはfalseです。Textは二重引用符で囲まれた文字列です。Unitは()と書き、値がないことを意味します。Byte、Fixed、Multiword<N, F>はさらなる数値型であり、後で登場します。
次章では値に名前を付けます。