モノトーンの伝説日記

OBS Studio と Blackmagic Design が大好き。

今日から始める F# “Day 6” オプション、配列、レコード、型略称

 おはようございます! いやこんばんはかな?

 すみません! F# 連載のことすっかり忘れてて… C++/CX 書くのが楽しくて楽しくて。

 今日は「オプション、配列、レコード、型略称」やろうと思います!!

概要

  1. オプション
  2. 配列
  3. レコード
  4. 型略称
  5. まとめ

1. オプション

 C++14 でいえば、std::optinal<T> というオプションなものについて書いていく。F# でも null は扱えるが、null は慣習にないので、filter 関数を使って Option に束縛する。

let filter (n: String) =
    match n with
    | null -> None
    | _ -> Some(n)
// if n <> null then Some(n) else None

 以下のような場合、

[<EntryPoint>]
let main args = 
    printfn "%A" (filter null)
    printfn "%A" (filter "")
    printfn "%A" (filter "x")
    0

次のような結果になる。

<null>
Some ""
Some "x"

 ちなみに、判断するには

match x with
| Some(x) -> …
| None -> …

でおk。

2. 配列

 いろいろな宣言方法がある。

let ary1 = [| 1; 2; 3 |]
let ary2 = [|
    1
    2
    3
    |]
let ary3 = [| for x in 1..3 -> x |]

let b = ary1.[0]

 取得は .[n] で行う。

3. レコード

 C# の struct みたいなイメージ。

type Point3D = {
    x: float;
    y: float;
    z: float;
}

4. 型略称

 C# の using TS = System.TimeSpan に近い感じ (C++ は型は略称にはできないが名前空間はできる)。

type P3 = Point3D

5. まとめ

 F# の連載、6 回で基本的なことはまとめられたんじゃないかと。ほかにも参照セル(ref で参照、! で逆参照)や遅延計算、インターフェース、名前空間などありますが、このあたりは置いといていいんじゃないかと。

 次回からようやく F# 特有の機能に入れるかもしれませんね。それでは~