我想知道是否有任何编程语言都有这样的运算符(ALWAYS
是占位符 - 我在问什么语言有ALWAYS
)
if a
doAStuff()
else if b
doBStuff()
ALWAYS
//runs if a or b is true
win()
else
doElse()
基本上,与else
相反。如果语句中的其他内容运行,它就会运行。
从逻辑上讲,就像这样
always = true
if a
doA()
else if b
doB()
else
always = false
doElse()
if always
win()
是否有任何语言将该逻辑内置到关键字中,例如第一个示例中的ALWAYS
?
答案 0 :(得分:1)
不是'语言不可知'。更像是“找我的语言”。使用Forth和Lisp,您可以自然地将这样的构造添加到语言中,并且它将像现有构造一样工作。我不知道默认情况下有任何语言。如果你的语言可扩展性比Forth或Lisp少,那么自然的方法是使用本地函数(如果你有一流的函数)或者在显示时设置一个标志,或者将代码设置为这两种情况都可以作为成对对待,而不需要很多重复。
所以,在JavaScript中:
;(function() {
function both() { win(); more stuff, potentially }
if (a) { doA(); if (b) both() }
else if (b) { doB(); if (a) both() }
else neither()
})()
在阅读之后,应该清楚的是,“两个”情况永远不会发生在第二个区块中。所以这简化为:
;(function() {
function both() { win(); more stuff, potentially }
if (a) { doA(); if (b) both() }
else if (b) doB()
else neither()
})()
这似乎不值得努力。因此,似乎更不值得语言功能。为什么不进一步写下来呢?
if (a) { doA(); if (b) { win(); more stuff, potentially } }
else if (b) doB()
else neither()
如果b
是一项昂贵的测试,只需保存结果即可。如果b
之前不得测试a
,请保存两个结果。显然,两个测试都必须始终运行。
;(function() {
var a = testA(),
b = testB()
... as above ...
})()
至于最后一个选项,“将代码视为两个条件可以被视为成对的因素”,你要找的是:
if (a && !b) doA()
if (!a && b) doB()
if (a && b) { doA(); doB(); win() } // or no doB() if you really want that
if (!a && !b) neither()
如果您愿意,请else if
。我实际上更喜欢这种选择模式匹配语言。如果你忘记了四种可能结果中的一种,Mercury甚至会抛出编译时错误。
答案 1 :(得分:0)
不确定这是否是您正在寻找的,但是一个简单的do-while循环将始终至少在Java中运行一次。