javascript - 用一些共享操作来干燥简单的条件

标签 javascript

我需要测试两个条件。两者都可能是正确的(但不能同时正确)。如果两者都不成立,我们什么也不做。如果其中任何一个为真,我们都会执行一个共同的操作。如果第二个条件为真,我们将执行附加操作。看起来很简单,但当我尝试编写代码时,我发现自己在重复条件或操作,而且感觉并不像它可能的那样干燥。

用伪代码来说明......

我们重复其中一个条件:

if a | b {
    do  x
    if b {
        do y
    }
}

或者,我们重复其中一项操作:

if a {
    do x
} else if b {
    do x
    do y
}

通常情况下,我可能不会停下来担心这个问题,除非条件和操作都是处理正则表达式的单行代码——复杂到不想重复它们,但又太短而无法保证它们自己的功能。

我可以将 bool 变量放入其中......

var doX = false
if a {
    doX = true
} else if b {
    doX = true
    do y
}
if doX {
    do x
}

……但这感觉有点笨拙。

有没有一种更干燥的方法来做到这一点——一些我没有想到的漂亮、简洁的条件逻辑? (我目前正在使用 JavaScript 工作,但我很高兴能有任何语言的更好示例。)

更新:最后,我选择了第三个(诚然“笨拙”)选项。 Sergio 首先捕获每场匹配的建议看起来当然是最好的,并且避免了代码重复,但随后您就失去了短路评估的性能优势(即,如果已知 a 为真,则无需评估 b。)对于特定的应用程序,这段代码在潜在的巨大字符串列表上运行很多很多次,这更有意义。 (x 和 y 的顺序并不重要。)

最佳答案

if a | b {
  do  x
  if b {
    do y
  }
}

这非常好并且可读,你可能无法击败它。

both conditionals and actions are one-liners that process regular expressions

啊,这就是问题所在。事实上,如果不是 ab 而是冗长且难以理解的正则表达式,我可以看到这如何使它变得不那么清晰。如果提取条件怎么办?

var a = /regex 1 check/
var b = /regex 2 check/

if a | b {
    do  x
    if b {
        do y
    }
}

关于javascript - 用一些共享操作来干燥简单的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55274814/

相关文章:

javascript - 参数结果隐式具有任何类型

javascript - 为什么 var eva = function() {} 不适用于 addEventListener()

javascript - 如何循环遍历数组并在每个项目之间等待一段时间?

javascript - 无法使 Angular 应用程序在 meteor 模板中运行

javascript - 带有错误行为的单选按钮的 jQuery 测验

javascript - 在 HTML <canvas> 中动态定位按钮

javascript - 如果用户的分辨率 < x,可以自动缩小吗?

javascript - 恢复 TypeORM 中的特定迁移

javascript - 如何将 ember 添加到 NodeJS 项目中?

javascript - FB.Event.subscribe & FB.getLoginStatus 未触发