是“ else if”是一种语言构造,还是编译器如何处理if / else构造的结果?

问题描述 投票:1回答:1

if/else语句在可接受的语法上很灵活。在C#之类的语言中,要执行的代码可以与条件检查在同一行上,也可以在新行上(无论是否缩进)在大括号内。这种灵活性提出了一个问题,即else if块是不是真正的语言构造,还是仅仅是if/else语句的灵活性的结果。

考虑此代码:

// Version 1
if (condition1)
  // do something
else if (condition2)
  // do something else
else
  // do some third thing

此代码可以用语法上不同但语义上相同的方式重写:

// Version 2
if (condition1)
  // do something
else
{
  if (condition2)
    // do something else
  else
    // do some third thing
}

else块周围的花括号是可选的,因为出于花括号使用的目的,if/else被视为单个语句,因此另一个语义相同的迭代将是:

// Version 3
if (condition1)
  // do something
else
  if (condition2)
    // do something else
  else
    // do some third thing

当然,版本1和版本3之间没有明显的区别,因为C#不尊重空格。那么,自然的问题是else if是内置在C#(或一般C系列语言)中的实际功能,还是仅仅是聪明的软件开发人员早就发现的灵活语法的有用结果。

我已经尝试编写程序来测试这种行为并尝试弄清潜在的行为,但是我无法编写能够成功区分这两种语法的程序。我要么不够聪明,要么差别很小。我还搜索了一个其他的SE社区,以将其发布在下面,但似乎没有合适的方法。

if / else语句在可接受的语法上很灵活。在C#之类的语言中,要执行的代码可以与条件检查在同一行上,也可以在括号或.... >>>

否,else if不是语言功能-只是语句之间对空格的不同使用。

elseif(condition)可以写在一行,两行或三行上;它更易于阅读,并且占用的垂直空间更少,可以将它们全部放在一两行上。

缩进也是可选的,但出于可读性考虑,我将其包括在内

if
    (condition1)
    DoSomething();
else
if
    (condition2)
    DoSomethingElse();
else
    DoAThirdThing();

if (condition1) 
    DoSomething();
else if (condition2) 
    DoSomethingElse();
else 
    DoAThirdThing();

if (condition1) DoSomething();
else if (condition2) DoSomethingElse();
else DoAThirdThing();
c# syntax
1个回答
0
投票

否,else if不是语言功能-只是语句之间对空格的不同使用。

© www.soinside.com 2019 - 2024. All rights reserved.