かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

手軽なスクリプト言語としての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