【问题标题】:Why is there no "return if" statement in programming languages?为什么编程语言中没有“return if”语句?
【发布时间】:2019-09-17 08:31:24
【问题描述】:

首先,我要指出,我对编程语言解剖的理论知识并没有达到应有的深度,在此先道歉。

这也可能是一个愚蠢的问题,对此我深表歉意,但我一直想知道为什么没有 return if 声明或至少没有语法糖(至少是我熟悉的那些) ) 编程语言,尤其是 Python 或 Lua 等语言,它们相对高级,通常允许使用语法糖进行替代拼写。

以如下代码为例:

if(x > y) {
    return x;
}

你当然知道会发生什么,if x > y is true x is returned。 但是,现在可以提出以下观点:

  1. 根据编程语言的不同,一个简单的语句需要几行代码。 当然你可以像if (x > y) { return x }这样内联写它
  2. “听起来”不太好:if x > y, x gets returned

只是为了说清楚,我并不是说“传统”方式不好,我只是出于兴趣而问。

如果您要使用“return if”之类的语句,上面的语句可能如下所示:

return x if (x > y);

它是单行的,读起来很好x gets returned if x > y


现在我问自己以下问题:

  1. 这仅仅是一个设计决定吗?
  2. return if 语法是否会给解析器/编译器带来不必要的复杂性?
  3. 如果它既不是第一个也不是第二个,那是什么?巧合?在这几十年的编程生涯中,我当然不会是第一个想到它的人。

编辑
由于我的示例显然具有误导性,我的意思是具有不同语法的相同行为。

所以如果 x 不大于 y,return x if(x > y) 根本不会返回。

【问题讨论】:

  • 编程语言实现强烈偏向于自上而下、从左到右的评估(如英语)。您建议将x>y 放置在return x 之后会与该纹理相悖。编程语言没有理由不能对if 语句实现这种方法,但我怀疑编译器会发出指令来首先评估条件,然后是跳转。
  • 有些语言(例如 Perl)有条件后缀,允许 ' if ' 但总的来说似乎没什么意义。您可能更喜欢说“如果条件做某事”,但其他人更喜欢说“如果条件做某事”。重要的是它完全可以说;两种情况下发出的代码都是相同的。
  • 这会使编程和代码审查变得更加烦人,因为 if 块可能非常大,而且我不喜欢先阅读代码才发现代码最后没有正确执行。如果我可以先阅读条件,那么我知道我可以跳过阅读接下来执行的代码。此外,首先有条件是尊重执行顺序,这在阅读代码时对我来说更符合逻辑。我认为扭转这种情况没有任何好处。

标签: if-statement return programming-languages


【解决方案1】:

据我了解,问题归结为:为什么大多数语法中的条件语句都是对齐的。即:(cond value)而不是(value cond)。 后者的论点是,它更紧密地遵循自然语言语法。虽然从句法语义上可能是这种情况,但相反的情况似乎更自然: 您首先列出必须满足的条件,因为后面的所有内容(子树)甚至可能都不需要评估,并且在程序的上下文中可以被视为毫无意义。

【讨论】:

    【解决方案2】:

    一些编程语言有(我的话)条件后缀。

    你可以在 Perl 中说,例如:

        print "I don't mind" if 6 == 9
    

    这种结构当然可以专门用于

        return "I don't mind" if 6 == 9
    

    所以这个前提一般来说是不正确的。在特定情况下,这是因为语言设计者认为它没有价值。正如一条评论所说,一般的配置是从左到右解析。添加这种语法在我(语言设计方面的业余爱好者)看来就像增加复杂性而没有什么好处。

    请注意,在构造“statement if condition”中,那么 statement 可以任意复杂,例如许多行包含在 {} 中。这不太可读。

    【讨论】:

      猜你喜欢
      • 2017-05-22
      • 2022-12-09
      • 2021-01-28
      • 2017-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-11
      • 2011-11-15
      相关资源
      最近更新 更多