Devs.tw 是讓工程師寫筆記、網誌的平台。歡迎您隨手紀錄、寫作,方便日後搜尋!
Maybe 其實是用來強迫開發者記得處理 null 的情況
舉例來說 用 php 常常會寫出以下的 code
function user_card($userId)
{
$user = User::find($userId);
echo '<div>user name is ' . $user->name . '</div>';
}
看起來很單純 但實務上會有問題 因為有時候傳進去的 user id 找不到
user 會變成 null
所以開發者要記得去檢查 $user === null
之類的情況
但是用 FP 語言的話 會直接變成 Maybe 的其中一個可能值
compiler 會逼你處理
userCard : Maybe User -> Html Msg
userCard maybeUser =
case maybeUser of
Nothing ->
div [] [ ... ]
Just user ->
div []
[ userInfo user
, userActivity user
]
就算把 type definition 寫錯
userCard : User -> Html Msg
寫成這樣也沒關係 因為從其它地方得到的 output 會是這邊的 input
然後其它地方得到的 output 一定是 Maybe User 而不是 User
所以 compiler 還是會檢查出來
也就是說 a 是一種 type
Maybe a 也是一種 type
在 type 描述上更強大完整了