かずきのBlog@hatena

日本マイクロソフトに勤めています。このブログは個人ブログなので、ここに書いている内容は個人的な意見で会社の公式見解ではない点にご注意ください。好きなものは XAML と C# 。苦手なものは型の無い言語です。

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