2.2. 型(クラス)
さて、aという名前の変数の値が 1 になるわけですが、計算機の中で 1 という
値を表現する方法は色々ありえます。代表的なものが、
といったところです。例えば Fortran では(暗黙の宣言は使わないとして)
integer i
real*8 a
といった形で、また C/C++ なら
int i;
double a;
といった形で最初に変数の「型」を宣言し、それから使う、ということをしま
す。一方、Python や Ruby (と書くのは面倒なので以下大抵単に Ruby を例に
します)では、 Crystal の例と同様に
a=1
といきなり書くことができます。Ruby では、言語が動的である、つまり、型
が実行時に定まることで、宣言を不要にしています。上のケースでは、右辺の
式(というか定数 1)が、Ruby の文法として「整数定数」を表すことに決まっ
ているので、その値が整数になり、それを代入される変数 a の型は、代入さ
れた時点で整数になるわけです。Crystal は、コンパイルされる言語なので
実行時ではなくコンパイルの時点で型が決まります。明示的に型が宣言されて
いない変数については「型推論」を行います。
a=1
の場合では、右側の型が整数なので、左側の型も整数にしておこう、というこ
とになるわけです。
a=1.0
と書けば、 1.0 は浮動小数点数型定数なので、a の型も浮動小数点型になり
ます。
a=1
print a.class,"\n"
a=1.0
print a.class,"\n"
b=2
print a+b, "\n"
を実行すると
Int32
Float64
3.0
となり、 1 の代入後の a の型(クラス)は Int32、 1.0の代入の後は Float64
になっていて、 a+b の計算結果も 3.0 となっていて b が浮動小数点に変換
されてから計算されたことがわかります。ここで、 変数名.関数名 とコンマでつな
ぐのは、 その関数 がその変数の属する型の「インスタンスメソッド」で、そのメソッ
ドを foo に適用している、ということです。
といわれてもよくわからないですよね、、、 bar が(古い)Fortran や Cでのやサブ
ルーチンと思ってもらってよいのですが、2つ違いがあります。
-
Fortran や Cでは 関数名(変数名) と書くところを、 変数名.関数(メソッ
ド)名 と書く
-
変数の型が違えば、関数名が同じでも別の関数になって、動作を別に定義で
きる。
1 は本当に見かけの問題ですが、どうしてこうしたいかは次の章で出す例で詳
しく解説します。2についても、次の章でもう少し色々なメソッドの例をみて
からにしましょう。
Crystal の整数型には Int8, Int16, Int32, Int64, Int128 と、それぞれの符
号なし型である UInt8, ... Uint128 の12種類、浮動小数点型には Float32
と Float64 の2種類があります。整数定数は、
1 : Int32
1_i8 : Int8
1_u8 : UInt8
で、同様に 16, 32, 64, 128 を指定できます。浮動小数点型定数は
1.0: Float64
1.0_f32: Float32
1.5e10: Float64
という感じです。
2.3. まとめ
-
Crystal のプログラムは、 crystal run foo.cr (foo.cr はプログラムがは
いったらファイルの名前)で実行される。Ruby と違ってコンパイルして実行
されるが、このコマンドで全部やってくれる。
-
プログラムの中では文字列で名前を決めた「変数」に、「値」をいれたり、
その変数を使った数式を書くことで計算させてその結果を別の変数にいれた
り、出力したりできる。
-
整数と浮動小数点数は「型」が違う。変数の型は、代入される値の型になる。
-
よく使う型としては整数 (Intxx, UIntxx)、浮動小数点 (Float32,
Float64)、文字列(String)がある。型名は大文字で始める。
-
整数を使って計算した結果は整数に、浮動小数点数を使って計算した結果は浮動小数点数になる。
-
変数.class で、その変数の型を表す文字列になる。ここで、
class は「メソッド」で、他の言語でいうところの関数だが、
その辺は次の章でもう少し詳しく述べる。
2.4. 課題
-
2つの変数 a, b に整数値をいれ、四則演算(加減乗除)の結果を出力するプ
ログラムを作成・実行し、結果が正しいことを確認せよ。
-
浮動小数点(Float64)の値で同様なことを行え。
-
2つの変数 a, b に値をいれ、出力したあと、a, b の値を入れ換えて、ま
た出力するプログラムを作成、実行して結果が正しいことを確認せよ。
-
整数と浮動小数点数の四則演算の結果がどうなるか、値と型を、Crystal
のドキュメントの記載を確認すると共に、実際のプログラムを作成して確認せよ。
2.5. 参考
https://crystal-lang.org/api/0.32.1/Int.html
https://crystal-lang.org/api/0.32.1/Float.html