If statement 为什么没有"?;如果返回“如果”;编程语言中的语句?

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 当然,您直接知道会发生什么,

首先,我想指出的是,我对编程语言的剖析的理论知识并没有它应有的深刻,我提前表示歉意

这可能也是一个愚蠢的问题,对此我深表歉意,但我一直在想,为什么在编程语言(至少是我熟悉的语言)中,特别是在Python或Lua等语言中,没有
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 If”的语句,上述语句可能如下所示:

    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块可能非常大,我不喜欢先阅读代码,然后才发现代码没有在最后正确执行。如果我可以先读取条件,那么我知道我可以跳过读取下一步执行的代码。另外,先有条件是关于执行顺序的,这对我在阅读代码时更有逻辑意义。我认为扭转这种局面没有任何好处。