【问题标题】:Is there any difference between using multiple if statements and else if statements?使用多个 if 语句和 else if 语句之间有什么区别吗?
【发布时间】:2011-01-08 21:16:12
【问题描述】:

此问题专门针对 shell 脚本,但可能与任何编程语言有关。

在 shell 脚本中使用多个 if 语句和使用 elif 语句之间有什么区别吗?而且,case 语句不适用于我的情况。

【问题讨论】:

  • 这自然取决于布局和交互。
  • 这个问题真的应该是language-agnostic

标签: if-statement language-agnostic


【解决方案1】:

是的,可能。考虑一下(C#、Java 等):

int x = GetValueFromSomewhere();

if (x == 0)
{
    // Something
    x = 1;
}
else if (x == 1)
{
    // Something else...
}

对比这个:

int x = GetValueFromSomewhere();

if (x == 0)
{
    // Something
    x = 1;
}
if (x == 1)
{
    // Something else...
}

在第一种情况下,只会出现 一个“某事”或“其他事...”。在第二种情况下,第一个块的副作用使第二个块中的条件为真。

再举一个例子,开始时条件可能不是互斥的:

int x = ...;

if (x < 10)
{
    ...
} 
else if (x < 100)
{
    ...
}
else if (x < 1000)
{
    ...
}

如果你去掉这里的“else”,那么只要一个条件匹配,其余的也会。

【讨论】:

    【解决方案2】:

    这与效率和您的需求有关。 If 语句相互独立执行;每个人都会跑。 Else if 语句仅在之前的 ifs 失败时执行。

    【讨论】:

      【解决方案3】:
      if (x == 0) {
          // 1
      }
      
      
      if (x >= 0) {
          // 2
      }
      
      if (x <= 0) {
          // 3
      }
      

      上面的代码将产生与下面的代码不同的值x=0

      if (x == 0) {
          // 1
      } else if (x >= 0) {
          // 2
      } else {
         // 3
      }
      

      在第一种情况下,123 的所有语句都将为 x = 0 执行。在第二种情况下,只有语句 1 将是。

      【讨论】:

        【解决方案4】:

        当您有多个 if 语句时,每个语句都被单独评估,如果条件正确,则可能会执行所有这些语句中的代码。如果你有 if / elif 语句,第二个条件只会在第一个条件评估的特定结果之后评估。

        考虑这个伪代码:

        If (cond A) { action 1}
        If (cond B) { action 2}
        

        如果 cond A 和 cond B 都为真,则两个动作都会执行。

        另一方面,这个伪代码:

        If (cond A) {action 1}
        Elif (cond B) {action 2}
        

        无论两个条件如何评估,都只会执行两个操作中的一个(或都不执行)。

        【讨论】:

          猜你喜欢
          • 2012-09-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-02-06
          • 1970-01-01
          相关资源
          最近更新 更多