かずきのBlog@hatena

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

手軽なスクリプト言語としてのF# その13「オブジェクト初期化子みたいなの」

F#のクラスは、インスタンスを生成するときにプロパティの値を任意の値で初期化する機能があったりします。C#でいうオブジェクト初期化子みたいなものですね。
ただ、F#ではオブジェクト初期化子という名前は使われていなくて「初期化時のプロパティへの値の代入」という言われ方をしています。


書き方は簡単です。以下のように書きます。

let 変数 = クラス名(プロパティ名 = 値, プロパティ名 = 値...)

さっそくサンプルで動きを確認してみます。

// 名前と年齢を持ったクラス
type Person() =
    let mutable name = ""
    let mutable age = 0

    member this.Name with get() = name and set(v) = name <- v
    member this.Age with get() = age and set(v) = age <- v

// 初期化時のプロパティへの値の代入
let p = Person(Name = "田中", Age = 18)
// 値がちゃんと入ってるか確認
printfn "Person Name = %s, Age = %d" p.Name p.Age

実行結果

Person Name = 田中, Age = 18