かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

手軽なスクリプト言語としてのF# その6

さて、今まで型にうるさいF#言語だけど型について一切触れてませんでした。
まぁ、普段使いするプリミティブ型は以下のようなものですね。

型名 どんなもの 具体的な値
int 32bit整数 1
string 文字列 "あいうえお"
float 64 ビット浮動小数 3.14
bool trueかfalse true

プリミティブ型の完全なリストは以下で参照できます。

このほかにもvoidの代わりに使われているunit型というのもあります。unit型は()と表記するようです。試しにこんなプログラム書いてみました。

let u = ()
printfn "%A" u

実行結果

<null>

関数は何かしらの値を返す必要があるらしいのですが、何も返さないときはこれを使うらしいです。


タプル型は(型名 * 型名 * 型名)のような形であらわされます。例えば

let t = (1, "two", false)

は、(int * string * bool)になります。


関数の型は、引数1 -> 引数2 -> ...引数n -> 戻り値のように書きます。例えば以下のような関数があるとすると

let add x y = x + y

型はint -> int -> intこんな風になります。


因みに、文字列から数字に変換したいということとかがよくありますが、そういうときには int "1" や float "3.1" のように書くことで変換できます。 string 1と書くことで数字から文字列も変換できます。


さて、ここまでプログラム書いてきて一度も型名とかちゃんと書いたことなかったわけですがF#が限界まで空気を読んでくれて型を推論してくれてるからです。楽でいいですね。
でも、型を明示することも出来ます。

// iはint型だと明示
let i : int = 100
// intを受け取ってintを受け取ってintを返す関数
let add (x : int) (y : int) : int = x + y

ということで、型についてちょっとだけ詳しくなった今日この頃でした。