【发布时间】:2019-05-02 13:52:08
【问题描述】:
我正在用 JS 进行函数式编程。最近开始使用 Daggy 来完成简单的模式匹配,但我觉得我还没有完全掌握。
鉴于此代码:
if(a === 1 && !b) {
do(y)
}
if(b === 3 && c === 2) {
do(z)
}
if (a) {
do(x)
}
有没有办法将这种凝聚力改进为类似的东西?:
when [a === 1 && !b] : do(y)
when [a] : do(x)
when [b === 3 && c === 2]: do(z)
【问题讨论】:
-
do是保留关键字...你会得到一个SyntaxError,而when不是关键字 -
什么是“凝聚力”?
-
如果块中只有一条语句,则可以放弃花括号:
if (a === 1 && !b) go(y); -
“改进”在什么意义上?您所做的只是将
if更改为when,在条件下使用[]而不是(),并使用:而不是完全关闭它(if没有阻塞)或使用块。如果你喜欢 (pastebin.com/TxMnum54),你可以在一行上写ifs,或者如果你喜欢 (pastebin.com/FgjfGufe) 甚至滥用&&运算符,这两者都不是更“实用”,也不是(恕我直言)改进. (我已将do更改为foo,请参阅@CertainPerformance 的评论)。还添加了缺少的分号,尤其是第二种形式不适用于 ASI。 -
如果这些是独家的,你会想要
else。
标签: javascript functional-programming