將 OptionT 與空值一起使用

在函數語言程式設計語言中,如 F# null 值被認為是潛在有害和差的風格(非慣用)。

考慮一下這個 C# 程式碼:

string x = SomeFunction ();
int    l = x.Length;

如果 xnullx.Length 會丟擲讓我們新增保護:

string x = SomeFunction ();
int    l = x != null ? x.Length : 0;

要麼:

string x = SomeFunction () ?? "";
int    l = x.Length;

要麼:

string x = SomeFunction ();
int    l = x?.Length;

在慣用 F# null 值沒有使用所以我們的程式碼如下所示:

let x = SomeFunction ()
let l = x.Length

但是,有時需要表示空值或無效值。然後我們可以使用 Option<'T>

let SomeFunction () : string option = ...

SomeFunction 要麼返回 Some string 值,要麼返回 None。我們使用模式匹配來提取 string

let v =
  match SomeFunction () with
  | Some x  -> x.Length
  | None    -> 0

這段程式碼比以下更脆弱的原因是:

string x = SomeFunction ();
int    l = x.Length;

是因為我們不能在 string option 上叫 Length。我們需要使用模式匹配來提取 string 值,並且通過這樣做我們保證 string 值可以安全使用。