否,else if
不是语言功能-只是语句之间对空格的不同使用。
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
不是语言功能-只是语句之间对空格的不同使用。
else
,if
和(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();
否,else if
不是语言功能-只是语句之间对空格的不同使用。