FP 不單只能用在 Array 與 Object 而已,事實上原本 if else
statement 也能以 ifElse()
取代,連多層 if else 也能以 ifElse()
實現。
Version
macOS Catalina 10.15.6
Ramda 0.27.1
Imperative
let data = 1
let f = x => {
if (x === 1) return 10
else if (x === 2) return 20
else return 30
}
f(1) // ?
f(2) // ?
f(3) // ?
Imperative 會使用 if
、else if
與 else
實現多層 if else
。
Nested ?:
let data = 1
let f = x => (x === 1) ? 10 : (x === 2) ? 20 : 30
f(1) // ?
f(2) // ?
f(3) // ?
也可使用 ?:
實現多層 if else
。
ifElse()
import { pipe, ifElse, always, equals } from 'ramda'
let data = 1
let g = ifElse(equals(2), always(20), always(30))
let f = ifElse(equals(1), always(10), g)
f(1) // ?
f(2) // ?
f(3) // ?
FP 會使用 ifElse()
:
- 第一個 argument 相當於
if else
的()
,可使用equals()
使其 point-free - 第二個 argument 的 function 當
true
時執行 - 第三個 argument 的 function 當
false
時執行
由於 false
又必須 nested if else 判斷,在 FP 會抽出新的 g()
使用 ifElse()
判斷。
Conclusion
ifElse()
特色是三個 argument 都是 function,因此第一個 argument 能以 function 加以 point-free,後面兩個 argument 儘管只想回傳 value,也必須以always()
包成 function