If statement 为什么没有"?;如果返回“如果”;编程语言中的语句?
首先,我想指出的是,我对编程语言的剖析的理论知识并没有它应有的深刻,我提前表示歉意 这可能也是一个愚蠢的问题,对此我深表歉意,但我一直在想,为什么在编程语言(至少是我熟悉的语言)中,特别是在Python或Lua等语言中,没有If statement 为什么没有"?;如果返回“如果”;编程语言中的语句?,if-statement,return,programming-languages,If Statement,Return,Programming Languages,首先,我想指出的是,我对编程语言的剖析的理论知识并没有它应有的深刻,我提前表示歉意 这可能也是一个愚蠢的问题,对此我深表歉意,但我一直在想,为什么在编程语言(至少是我熟悉的语言)中,特别是在Python或Lua等语言中,没有return if语句,或者至少没有语法糖,这是相对较高的水平,通常允许一个替代拼写与语法糖 以以下代码为例: if(x > y) { return x; } print "I don't mind" if 6 == 9 当然,您直接知道会发生什么,
return if
语句,或者至少没有语法糖,这是相对较高的水平,通常允许一个替代拼写与语法糖
以以下代码为例:
if(x > y) {
return x;
}
print "I don't mind" if 6 == 9
当然,您直接知道会发生什么,如果x>y为真,则返回x
。
然而,人们现在可以提出以下论点:
if(x>y){returnx}
如果x>y,x就会被返回
return x if (x > y);
它是一个单行程序,读起来很好x,如果x>y则返回
现在我问自己以下问题:
这仅仅是一个设计决策吗
如果
语法给解析器/编译器带来不必要的麻烦,是否返回
如果它既不是第一个也不是第二个,那么它是什么?巧合在几十年的编程过程中,我肯定不会是第一个想到它的人
编辑:
因为我的例子显然有误导性,所以我的意思是相同的行为有不同的语法
因此返回x如果(x>y)
如果x不大于y则根本不返回。一些编程语言有(我的单词)条件后缀
例如,您可以用Perl说:
if(x > y) {
return x;
}
print "I don't mind" if 6 == 9
当然,这种结构可以专门用于
return "I don't mind" if 6 == 9
所以这个前提在一般情况下是不正确的。在特定情况下,这是因为语言设计师认为它没有任何价值。正如一条评论所说,一般的处理方式是从左到右解析。在我看来(我只是一个语言设计的业余爱好者),添加这种语法就像是增加复杂性而没有什么好处
请注意,在构造“statement if condition”时,语句可以任意复杂,例如{}中包含许多行。这不太可读。我理解的问题归结为:为什么条件语句在大多数语法中是左对齐的。即:(cond value)而不是(value cond)。
后者的理由是,它更接近自然语言语法。虽然在句法和语义上可能是这样,但相反的情况似乎更自然:
您首先列出必须满足的条件,因为接下来的所有内容(子树)甚至可能都不需要进行计算,并且在程序上下文中可能被视为没有意义 编程语言实现强烈倾向于自上而下、左右求值(如英语)。您的建议是将x>y
放置在返回x
切割后的位置。编程语言没有理由不能实现这种方法来处理if
语句,但我怀疑编译器会先发出指令来计算条件,然后再跳转。有些语言(例如Perl)有条件后缀,允许使用“if”,但一般来说似乎没有什么意义。你可能更喜欢说“如果条件允许做某事”,但其他人更喜欢“如果条件允许做某事”。重要的是,它可以说是在所有;在这两种情况下发出的代码都是相同的。这会使编程和代码审查变得更加烦人,因为if块可能非常大,我不喜欢先阅读代码,然后才发现代码没有在最后正确执行。如果我可以先读取条件,那么我知道我可以跳过读取下一步执行的代码。另外,先有条件是关于执行顺序的,这对我在阅读代码时更有逻辑意义。我认为扭转这种局面没有任何好处。