點燈坊

失くすものさえない今が強くなるチャンスよ

使用 Maybe 執行 Side Effect

Sam Xiao's Avatar 2021-07-29

實務上會遇到若 Argument 存在則執行 Side Effect,否則不執行,傳統會使用 if 判斷 Argument,事實上也可透過 Maybe 自動忽略 nullundefined 不執行 Side Effect。

Version

Sanctuary 3.1.0

if

let f = g => x => {
  if (x) g (x)
}

f (console.log) (1)
f (console.log) (null)
f (console.log) (undefined)

使用 if 判斷 argument 不是 nullundefined 才執行 side effect。

effect000

Maybe

import { compose, map } from 'sanctuary'
import { toMaybe } from 'wink-fp'

let f = g => compose (map (g)) (toMaybe)

f (console.log) (1)
f (console.log) (null)
f (console.log) (undefined)

將 argument 透過 toMaybe 包進 Maybe,若為 nullundefined 則為 Nothing,因此不會執行 side effect。

effect001

Conclusion

  • 由於 toMaybe 會將 nullundefined 視為 Nothing,可使用此特色避免執行 side effect
  • toMaybe 原本為 Sanctuary 內建 function,但後來因故拿掉,可改用 Wink-fp 版本的 toMaybe