Programming languages 是否有任何主要语言有一个;或如果&引用;亦如;有条件的,如果没有,为什么没有?

Programming languages 是否有任何主要语言有一个;或如果&引用;亦如;有条件的,如果没有,为什么没有?,programming-languages,conditional-statements,Programming Languages,Conditional Statements,我的一位朋友正在学习编程,他问我为什么没有一个“”和if”/“语句,以及if“/”或if”语句(非排他or),在该语句中,可以满足多个独立的测试条件和独立的结果,从而防止触发任何“其他”条件Edit:我认为我在这里选择的“or”可能是一个不好的关键字,因为或关键字通常是惰性计算的,所以第二个分支永远不会触发。我所说的是所有真实条件都会触发的情况,但是如果或ifs之间没有真实条件,那么就转到else/elif分支 下面是一个示例(使用python语法): 如果出现以下情况: print('a评估为

我的一位朋友正在学习编程,他问我为什么没有一个“
”和if
”/“
语句,以及if
“/”
或if
”语句(非排他or),在该语句中,可以满足多个独立的测试条件和独立的结果,从而防止触发任何“
其他
”条件Edit:我认为我在这里选择的“or”可能是一个不好的关键字,因为
关键字通常是惰性计算的,所以第二个分支永远不会触发。我所说的是所有真实条件都会触发的情况,但是如果
或if
s之间没有真实条件,那么就转到
else
/
elif
分支

下面是一个示例(使用python语法):

如果出现以下情况:
print('a评估为True')
orif b:
打印('b评估为True')
其他:
打印('a和b都计算为假')
这与
elif
的不同之处在于,如果a
b
均为真,则其输出为:

a的计算结果为True
b评估为真
而在
elif
中,该条件的输出将是:

a的计算结果为True
我戴上“我已经编程多年了”的帽子,开始解释,“当然,这里没有
orif
语句,因为……”,但我想不出一个好的理由。这个概念的一个很好的例子是,要求您打印1到100之间的所有数字,但所有可被3整除的数字都被
fizz
替换,所有可被5整除的数字都被
buzz
替换,所有可同时被3和5整除的数字都被
fizzbuzz
替换。使用“
orif
”语法,可以通过单个条件完成:

范围(1100)内x的
:
outsr=“”
如果x%3==0:
outstr+=“嘶嘶作响”
orif x%5==0:
outstr+=“嗡嗡声”
其他:
超出r=x
打印(x)
但如果没有它,您将陷入不那么优雅的境地,要么切换到三个条件,要么至少增加一个模求值:

范围(0,100)内x的
:
outsr=“”
如果x%3==0:
outstr+=“嘶嘶作响”
如果x%5==0:
outstr+=“嗡嗡声”
如果不是x%15==0:#也可能不是(x%3和x%5)
超出r=x
打印(x)
或者,您可以通过提前存储它们来避免额外的模运算:

范围(0,100)内x的
:
outsr=“”
嘶嘶声=(x%3==0)
嗡嗡声=(x%5==0)
如果嘶嘶作响:
outstr+=“嘶嘶作响”
如果嗡嗡声:
outstr+=“嗡嗡声”
如果没有(嘶嘶声或嗡嗡声):
超出r=x
打印(x)
显然还有其他方法可以实现这一点,但没有一种方法像“orif”结构那样直观。回顾过去,我注意到这是我实际上遇到过很多次的事情,我有很多不同效果的条件,每个都需要评估,如果没有满足,就会出现一个默认条件。我通常通过在每个单独的条件中使用恼人的“flag”变量来“解决”这个问题:

OneConditionMet=False
如果是:
#做“a”的事情
OneConditionMet=True
如果b:
#做“b”类的事情
OneConditionMet=True
#       ...
如果n:
#做“n”的东西
OneConditionMet=True
如果不满足以下条件:
#执行默认行为。
显然,这是一个相当不雅和恼人的方式来做这件事,另一个问题解决了“奥利夫”。因此,考虑到所有这些关于“orif
”的明确原因,我震惊地发现在报告中没有提到任何类似的内容。这让我觉得我缺少一些基本的东西,为什么这不起作用。我能想到的唯一原因是,如上所述,评估需要稍微少一些惰性,因为即使满足第一个“if”条件,它也需要检查是否有“或”分支出现。不过,这是一个非常容易解决的问题,因为您可以这样做:如果条件树中有任何
或if
语句,那么所有
if
语句都需要是
或if
语句,比如:

orif a:
print('a评估为True')
orif b:
打印('b评估为True')
其他:
打印('a和b都不计算为真')

所以,有一个问题——我是否遗漏了一些基本上等同于这一点的东西?我是否错过了它根本不可行的一些原因,或者这只是一个巨大的错过的机会?

我认为
orif
构造不适合C,因为它太复杂了。所有现有的C语句都有简单的语法,并且只有一个子语句。例如,在
For

for (clause; expression; expression)
    statement
即使是最复杂的switch,也使用一个子语句和一种技巧,即使用
case
作为标签,类似于
goto
标签。
orif
将非常不同——它需要任意数量的子语句及其相应的条件


从这个角度来看,
orif
将是一个与所有现有C语句完全不同的野兽。今天,尽管许多流行语言提供了C语言中没有的各种结构,但循环和条件语句等基本语句在许多情况下都是从C语言继承的(虽然有明显的变化,但仍然存在)。我为C提出的论点也适用于许多其他语言。(并非全部,因为Python有类似的
elif
)我想这至少部分解释了为什么没有
orif
,我不知道。但是

首先,请注意,您的“并行if”几乎完全等同于标准“if”序列。唯一的区别就是
else
子句。如果谓词计算