我需要测试两个条件。两者都可能是正确的(但不能同时正确)。如果两者都不成立,我们什么也不做。如果其中任何一个为真,我们都会执行一个共同的操作。如果第二个条件为真,我们将执行附加操作。看起来很简单,但当我尝试编写代码时,我发现自己在重复条件或操作,而且感觉并不像它可能的那样干燥。
用伪代码来说明......
我们重复其中一个条件:
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
啊,这就是问题所在。事实上,如果不是 a
和 b
而是冗长且难以理解的正则表达式,我可以看到这如何使它变得不那么清晰。如果提取条件怎么办?
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/