为什么编程语言中没有"return if"语句?
Why is there no "return if" statement in programming languages?
首先,我想指出,我对编程语言解剖的理论知识没有达到应有的深度,在此先表示歉意。
这也可能是一个愚蠢的问题,对此我深表歉意,但我一直想知道为什么没有 return if
声明或至少是语法糖(至少我的那些我熟悉)编程语言,尤其是像 Python 或 Lua 这样的语言,它们相对高级并且通常允许使用语法糖的替代拼写。
以下面的代码为例:
if(x > y) {
return x;
}
你当然知道会发生什么,if x > y is true x is returned
。
但是,现在可以争论以下问题:
- 根据编程语言的不同,一个简单的语句需要几行。 当然你可以像
if (x > y) { return x }
- 没"sound"那么好:
if x > y, x gets returned
说明一下,我并不是说"traditional"方式不好,我只是出于兴趣才问的。
如果您要使用像 "return if" 这样的语句,上面的语句可能如下所示:
return x if (x > y);
单行本,读起来很好x gets returned if x > y
现在我问自己以下问题:
- 这仅仅是一个设计决定吗?
return if
语法是否会导致 parser/compiler 不必要的复杂化?
- 如果不是第一个也不是第二个,那是什么?巧合?几十年的编程生涯,我当然不会是第一个想到它的人。
编辑:
由于我的示例显然具有误导性,我的意思是具有不同语法的相同行为。
所以如果 x 不大于 y,return x if(x > y)
根本不会 return。
有些编程语言有(我的话)条件后缀。
你可以用 Perl 说,例如:
print "I don't mind" if 6 == 9
这个构造当然可以专门用于
return "I don't mind" if 6 == 9
所以一般情况下前提是不成立的。在特定情况下,这是因为语言设计者认为它没有价值。正如一条评论所说,一般的倾向是从左到右的解析。添加这种语法对我(语言设计方面的业余爱好者)来说就像增加复杂性却收效甚微。
注意在构造"statement if condition" then statement可以任意复杂的,例如{ } 中包含许多行。这不太可读。
我理解的问题归结为:为什么条件语句在大多数语法中都是左对齐的。即:(cond value) 而不是 (value cond)。
后者的论点是,它更紧密地遵循自然语言语法。虽然在句法语义上可能是这种情况,但相反的情况似乎更自然:
您首先列出必须满足的条件,因为后面的所有内容(子树)甚至可能都不需要评估,并且在程序的上下文中可以被视为毫无意义。
首先,我想指出,我对编程语言解剖的理论知识没有达到应有的深度,在此先表示歉意。
这也可能是一个愚蠢的问题,对此我深表歉意,但我一直想知道为什么没有 return if
声明或至少是语法糖(至少我的那些我熟悉)编程语言,尤其是像 Python 或 Lua 这样的语言,它们相对高级并且通常允许使用语法糖的替代拼写。
以下面的代码为例:
if(x > y) {
return x;
}
你当然知道会发生什么,if x > y is true x is returned
。
但是,现在可以争论以下问题:
- 根据编程语言的不同,一个简单的语句需要几行。 当然你可以像
if (x > y) { return x }
- 没"sound"那么好:
if x > y, x gets returned
说明一下,我并不是说"traditional"方式不好,我只是出于兴趣才问的。
如果您要使用像 "return if" 这样的语句,上面的语句可能如下所示:
return x if (x > y);
单行本,读起来很好x gets returned if x > y
现在我问自己以下问题:
- 这仅仅是一个设计决定吗?
return if
语法是否会导致 parser/compiler 不必要的复杂化?- 如果不是第一个也不是第二个,那是什么?巧合?几十年的编程生涯,我当然不会是第一个想到它的人。
编辑:
由于我的示例显然具有误导性,我的意思是具有不同语法的相同行为。
所以如果 x 不大于 y,return x if(x > y)
根本不会 return。
有些编程语言有(我的话)条件后缀。
你可以用 Perl 说,例如:
print "I don't mind" if 6 == 9
这个构造当然可以专门用于
return "I don't mind" if 6 == 9
所以一般情况下前提是不成立的。在特定情况下,这是因为语言设计者认为它没有价值。正如一条评论所说,一般的倾向是从左到右的解析。添加这种语法对我(语言设计方面的业余爱好者)来说就像增加复杂性却收效甚微。
注意在构造"statement if condition" then statement可以任意复杂的,例如{ } 中包含许多行。这不太可读。
我理解的问题归结为:为什么条件语句在大多数语法中都是左对齐的。即:(cond value) 而不是 (value cond)。 后者的论点是,它更紧密地遵循自然语言语法。虽然在句法语义上可能是这种情况,但相反的情况似乎更自然: 您首先列出必须满足的条件,因为后面的所有内容(子树)甚至可能都不需要评估,并且在程序的上下文中可以被视为毫无意义。