Programming languages if/else和if/elseif

Programming languages if/else和if/elseif,programming-languages,syntax,if-statement,Programming Languages,Syntax,If Statement,如果我有这样一个语句块: if (/*condition here*/){ } else{ } a / \ X b / \ Y c / \ Z 0 (a--b--c) / / / \ X Y Z 0 或者像这样: if (/*condition here*/) else if (/*condition here*/) {} else if (/*condition here*/) {} 有什么区别

如果我有这样一个语句块:

if (/*condition here*/){ }
else{ }
   a
  / \
 X   b
    / \
   Y   c
      / \
     Z   0
   (a--b--c)
   /  /  /  \
  X  Y  Z    0
或者像这样:

if (/*condition here*/)
else if (/*condition here*/) {}
else if (/*condition here*/) {}
有什么区别


似乎使用if/else时,if部分用于true状态,而else部分用于所有其他可能的选项(false)。else if在许多情况下都很有用。这是我的理解,还有什么我应该知道的吗?

else if
基本上是指
else
部分if
是另一个
if
语句。

给定一个变量,您将使用简单的
if else
结构。当存在多个变量且针对不同的可能性有不同的执行路径时,将使用
if-else if-…-else
。注意,后者也以一个
else
语句结束。

情况a:

if( condition )
{
}
else
{
}
当上述语句中的条件为false时,将始终执行else块中的语句

情况b:

if( condition )
{
}
else if( condition2 )
{
}
else
{
}
当“condition”为false时,else if块中的语句将仅在condition2为true时执行。 当条件2为false时,将执行else块中的语句。

如果没有“elseif”语法,则必须编写chain if语句,以便以这种方式处理几种可能的结果之一:

if( str == "string1" ) {
   //handle first case
} else {
    if( str == "string2" ) {
       //handle second case
    } else {
       if( str == "string3" ) {
           //handle third case
       } else {
          //default case
       }
    }
 }
相反,你可以写作

if( str == "string1" ) {
   //handle first case
} else if( str == "string2" ) {
   //handle second case
} else if( str == "string3" ) {
   //handle third case
} else {
   //default case
}

与上一个完全相同,但看起来更好,更容易阅读。

您已经自己给出了答案。if/else表示真/假结果,比如int=2或任何其他可能的int值,if/elseif表示两个以上的结果,比如int=2和int=3,依此类推

它还对变量的上下文进行分组。你可以像这样检查每一个结果

if (a == 2) { do one thing };
if (a == 3) { do another thing };
...
if (a != 2 && a != 3 ...) { do something else };

如果使用if/else/elseif,可读性会更好。

许多语言都有这样的语法(这里:,所以JavaScript):

IfStatement:
如果(
表达式
语句
否则
语句
如果(
表达式
语句

声明:

可变语句
清空状态
表达陈述
IfStatement
迭代语句
持续陈述
断开语句
返回语句
带声明
标签状态
切换语句
喉道
幽会

块:
{
语句列表选项
}

语句列表:
声明
语句列表语句

因此,ifStatement的分支可能包含一个语句块(block)或一个其他语句(block除外)。这意味着这是有效的:

if (expr)
    someStatement;
else
    otherStatement;
由于StatementList可能只包含一条语句,因此这些示例与前面的示例相同:

if (expr) {
    someStatement;
} else {
    otherStatement;
}

if (expr)
    someStatement;
else {
    otherStatement;
}

if (expr) {
    someStatement;
} else
    otherStatement;
当我们用另一个IfStatement替换
otherStatement
时,我们得到:

if (expr) {
    someStatement;
} else
    if (expr) {
        someOtherStatement;
    }
剩下的只是代码格式:

if (expr) {
    someStatement;
} else if (expr) {
    someOtherStatement;
}

强调秋葵的话

此外,如果一种语言有一个真正的elif/elsif/elseif(比如,一个“真正的”elseif指令,而不是一种通过格式化隐藏起来的嵌套链接),那么编译器可以很容易地在抽象语法树(或类似的,请参阅)中发出一个节点,而不是嵌套它们

举个例子:

在C/C++中,假设您有:

if (a) {
    X
} else if (b) {
    Y
} else if (c) {
    Z
} else {
    0
}
然后编译器将构建如下所示的AST节点:

if (/*condition here*/){ }
else{ }
   a
  / \
 X   b
    / \
   Y   c
      / \
     Z   0
   (a--b--c)
   /  /  /  \
  X  Y  Z    0
但是如果选择的语言有一个真正的if-else:

if (a) {
    X
} elif (b) {
    Y
} elif (c) {
    Z
} else {
    0
}
然后AST可以更容易地如下所示:

if (/*condition here*/){ }
else{ }
   a
  / \
 X   b
    / \
   Y   c
      / \
     Z   0
   (a--b--c)
   /  /  /  \
  X  Y  Z    0
在这种语言中,“if-else”只有在大括号不是强制性的情况下才可能出现:

if (a) {
    X
} elif (b) {
    Y
} else if (c) {  // syntax error "missing braces" if braces mandatory
    Z
} else {
    0
}
相应的AST(如果大括号不是必需的):


这可以使CFG分析()更容易实现(虽然可能没有实际的优化好处;因此,我认为这只会让懒惰的程序员受益:d)。

如果您想检查更多条件,我们可以使用if..elseif。单一条件,然后我们可以使用if或if…else。

这里我无法上传完整的示例说明,请浏览以下链接。

if..else语句详细信息
如果……其他详细信息

if/else if/else

if(condition)
 {
   if(condition)
      statement;
   else 
     statement;
  }   
else if(condition)
{
    if(condition)
     statement;
    else
     statement;
}
else
    statement;

if/else和if/else如果也这样使用

第二种情况。。。其他人。。。与Switch case完全一样,但它被广泛使用,Switch语句不能用于字符串。@sharpooth-我确信它们可以在PHP和其他语言中使用。不正确,因为这种语法
else如果
有副作用(即免费提供)。换句话说,这里没有
else if
语法,这里只有
if
else
。@greenoldman:是的,你说得对,它是免费的,但在语言标准术语中,它几乎不是“副作用”,它只是组织代码的一种方式。