【问题标题】:Else-If With Same ConditionElse-If 条件相同
【发布时间】:2014-03-17 20:31:53
【问题描述】:
if (Condition1)
{
    dothis;
}
else if (Condition1)
{
    dothat;
}

出于好奇,当我为else if 调用相同的条件时,当满足Condition1 时,代码的dothat 部分是否仍会执行?这是否因编程语言而异?

【问题讨论】:

    标签: if-statement language-agnostic logic


    【解决方案1】:

    你写的基本上相当于

    if(Condition1)
    {
      dothis;
    }
    else
    {
      if(Condition1)
      {
        dothat;
      }
    }
    

    所以不,它永远不会被调用。

    【讨论】:

      【解决方案2】:

      不,第二个条件永远不会以任何语言执行。 Here is a basic flowchart of your logic.

      但是,如果 Condition1 在第一个条件下以某种方式计算为 false 而在第二个条件下计算为 true,则将调用第二个条件。示例:

      <?php
      $var = true;
      function condition() {
          global $var;
          $var = !$var;
          return $var;
      }
      
      if(condition()) {
          echo "Conditional 1";
      } elseif(condition()) {
          echo "Conditional 2";
      }
      

      在这种情况下,将打印“条件 2”,因为 condition() 首先评估为 false,然后评估为 true。

      【讨论】:

        【解决方案3】:

        虽然每个 if-else-statement 最多执行一个分支1,但在“条件”包含副作用的情况下,它可能并不总是被执行的if 分支。

        例如,考虑this JavaScript code 带有“条件”表达式引入的副作用。

        y = -1;
        if (++y) {         // the "condition" is ++y
          alert("1")
        } else if (++y) {
          alert("2")
        }
        

        只执行了一个分支(“2”),但在两种情况下都使用了相同“条件”。由于这些原因,在条件句中产生副作用可能是有问题的。


        1 在所有现代主流语言中,if-else 的条件都是“按需”和“按顺序”评估的。因此,无论其他副作用如何,都会执行条件评估为 true 的第一个分支,并且它是 only 执行的分支。

        【讨论】:

        • 有些人为了解决这样的案件而在身边放牛。 :)
        • @cHao 或者装满岩盐的霰弹枪 ;-)
        【解决方案4】:

        第二个if 跟在else 之后——因此,只有在第一个if成功时才会执行。所以不行; dothat 不会被执行。所有(理智的)编程语言都这样做。

        但是,某些编程语言具有 else if 的特殊构造,您必须将其编写为一个语句,根据语言的不同,称为 elifelsifElseIf

        【讨论】:

          【解决方案5】:

          由于Condition1 被评估为Trueif 的“dothis”将被调用并跳过else if。如果您想调用dothisdothat,那么您将拥有两个具有相同Condition1if 语句,或者将dothisdothat 放在一个if 语句下。这是我在使用过的计算机编程语言中看到的。

          Python 示例。

          b = 2
          if b == 2:
              print "Hello"
          elif b == 2:
              print "World"
          ... 
          Hello
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2019-07-01
            • 1970-01-01
            • 2011-11-06
            • 2020-09-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多