Ramda 與 Crocks 都沒有提供 isNonEmptyString()
,但我們可自行組合。
Version
macOS Catalina 10.15.3
VS Code 1.43.0
Quokka 1.0.282
Ramda 0.27.0
Crocks 0.12.3
Ramda
import { isEmpty, complement, allPass, is } from 'ramda'
let isNonEmptyString = allPass([
complement(isEmpty),
is(String)
])
isNonEmptyString('') // ?
isNonEmptyString('abc') // ?
若使用 Ramda,要判斷 non empty string,有兩個條件:
- 必須是 string:
is(String)
- 必須是 non-empty:
complement(isEmpty)
且兩者都必須成立:allPass()
。
Crocks
import { isString, and, not, isEmpty } from 'crocks'
let isNonEmptyString = and(not(isEmpty), isString)
isNonEmptyString('') // ?
isNonEmptyString('abc') // ?
若使用 Crocks,判斷條件與 Ramda 一樣,不過使用 function 不太一樣:
- 必須是 string:Crocks 直接提供
isString()
,不需用is()
與String()
組合 - 必須是 non-empty:Crocks 也提供了
isEmpty()
,與 Ramda 完全一樣,而 Crocks 的not()
相當於 Ramda 的complement()
,而and()
相當於allPass()
Conclusion
- Ramda 與 Crocks 有不少功能是重複的,有些 function 名稱完全一樣,有些則不同
- Crocks 的
not()
與 Ramda 的complement()
完全相同;而 Crocks 的and()
也與 Ramda 的allPass()
完全相同 - 若以 API 角度,Crocks 的
not()
與and()
語意較佳,因為既然是 Functional Programming,所有的 function 都應該是針對其他 function 而來,而 Ramda 的not()
是針對 value,也就是!
;and()
也是針對 value,也就是&&
,實務上很少使用,還不如學 Crocks 將not()
與and()
直接針對 function
Reference
Ramda, isEmpty()
Ramda, complement()
Ramda, allPass()
Ramda, is()
Crocks, isString()
Crocks, and()
Crocks, not()
Crocks, isEmpty()