將 OptionT 與空值一起使用
在函數語言程式設計語言中,如 F#
null
值被認為是潛在有害和差的風格(非慣用)。
考慮一下這個 C#
程式碼:
string x = SomeFunction ();
int l = x.Length;
如果 x
是 null
,x.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
值可以安全使用。