What is it, naokirin?

OCamlに入門してみた(2)

前回は雑然とC/C++JavaOCamlとの違いを整数型や浮動小数点型についてみてみました。

今回はOCamlに存在する型についてまとめてみます。

unit型
初めに他の言語では聞きなれない型をもってきました。とはいっても、この型は"()"という要素を含むだけのものです。
はっきり言ってこれだけでは利用価値の欠片も感じられませんが、たとえば入出力のみを行うような関数のように、返す値に意味が無いという場合もあります(つまりC/C++Javaのvoid型のようなものです)。あと、else節の省略を行った場合には"else ()"があるものとして処理されていることになるといったこともあります。


int型
整数型です。
演算子としては 和『 i + j 』、差『 i - j 』、積『 i * j 』、商『 i / j 』、剰余『 i mod j 』が存在します。
また論理演算子として
ビット毎の論理積『 i land j 』、論理和『 i lor j 』、排他的論理和『 i lxor j 』、論理否定『 lnot i 』があります。
またシフト演算子として iのjビット左シフト『 i lsl j 』、iのjビット右シフト(最上位ビットを0にする)『 i lsr j 』、iのjビット右シフト(最上位ビットはiの正負を保存するように設定)『 i asr j 』があります。


float型
浮動小数点数型です。
演算子として、和『 i +. j 』、差『 i -. j 』、積『 i *. j 』、商『 i /. j 』があります。
また前回紹介したようにint型との変換に"int_of_float"や"float_of_int"といった関数を使うことができます。


char型
文字型です。
正確にはASCII文字やエスケープシーケンス一文字をシングルクォーテーション('')で囲んだもの。
int型とASCII表の対応に従って変換できる"int_of_char"、"char_of_int"が存在します。


string型
文字列型です。
正確にはダブルクォーテーション("")で囲まれた文字列(エスケープシーケンスを含む)。
演算子として"^"が存在し、文字列の結合に使う。

"Hello "^"World";;
>- : string = Hello World


bool型
真偽値型。
演算子として、否定『 not i 』、論理積『 i && j 』、論理和『 i || j 』がある。
また式全体でbool型となる比較演算子がある。(もちろん比較する i, j の型は一致していなければならない。)
i = j : i と j が等しいとき、true。
i <> j : i と j がひとしくないとき、true。
i < j : i が j より小さいとき、true。
i > j : i が j より大きいとき、true。
i <= j : i が j 以下のとき、true。
i >= j : i が j 以上のとき、true。


今回はOCamlの型について勉強してみましたが、様々な型が存在しますね。それぞれの型の特性を知っているとOCamlでプログラミングするときに便利だと思います。型推論が強力なので型を意識しなくていいというわけではなく、宣言しない分、より意識しなければならないのではないかと思います。

ちなみに型を明示的に宣言することもできます。(変数 x をfloat型と明示的に宣言)。

let x : float = 1.0;;