おはようございます! いやこんばんはかな?
すみません! F# 連載のことすっかり忘れてて… C++/CX 書くのが楽しくて楽しくて。
今日は「オプション、配列、レコード、型略称」やろうと思います!!
概要
- オプション
- 配列
- レコード
- 型略称
- まとめ
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# 特有の機能に入れるかもしれませんね。それでは~