TL;DR

  • F# では、型を定義する書き方と値を構築する書き方がよく似ている。
  • レコードは分割代入やドット記法で、判別共用体はパターンマッチで値を取り出す。

内容

レコードの場合

レコード型の定義と値の構築は、次のように書く。

type Person = {First:string; Last:string}
let aPerson = {First="Alex"; Last="Adam"}

値は分割代入で取り出せる。

let {First=first; Last=last} = aPerson

ドット記法でフィールドにアクセスすることもできる。

let first = aPerson.First
let last = aPerson.Last

選択型(判別共用体)の場合

型の合成で見た選択型(判別共用体)は、次のように定義する。

type OrderQuantity =
    | UnitQuantity of int
    | KilogramQuantity of float

値を構築するときは、ケースラベルのどれかをコンストラクタ関数として使う。

let anOrderQtyInUnits = UnitQuantity 10
let anOrderQtyInKg = KilogramQuantity 2.5

値を分解するときは、パターンマッチを使う。

let printQuantity aOrderQty =
    match aOrderQty with
    | UnitQuantity uQty -> printfn "%i units" uQty
    | KilogramQuantity kgQty -> printfn "%g kg" kgQty
 
printQuantity anOrderQtyInUnits // 10 units
printQuantity anOrderQtyInKg    // 2.5 kg

キーワード