【问题标题】:Multiple IF with one ELSE多个 IF 和一个 ELSE
【发布时间】:2012-10-23 05:47:55
【问题描述】:

我想考虑一项语法改进。

我怎样才能写得更好:

IF condition1 
    IF condition2
        { do something }
    ELSE 
        { message1 }
ELSE 
    { message1 }

有两个 IF 语句不能在一个语句中连接,但在两个 ELSE 部分中的代码必须相同(在此示例中为 message1)。

如何写得更好?我不想写相同的代码(在 ELSE 部分)两次。

提前TnX!

内曼加

【问题讨论】:

  • 你用什么语言工作?
  • IF condition1 AND condition2 ... ELSE message1?
  • “不能在一个语句中加入” - 为什么?
  • @alestanis 语言并不重要。我需要一般的答案,伪代码。
  • @NemanjaVujacic,那么最好提供一些真实的例子,而不是过于简单的例子。

标签: algorithm syntax if-statement


【解决方案1】:

显而易见的解决方案是将这两个条件结合起来:

IF condition1 AND condition2
    { do something }
ELSE 
    { message1 }

但是,如果由于某种原因这两个条件确实无法组合,并且您使用的是具有 break 关键字或等效关键字的类 C 语言,那么您可以执行以下操作:

DO
   IF condition1
      IF condition2
          { do something }
          BREAK
   { message1 }
WHILE FALSE

【讨论】:

  • 两个 IF 语句不能合并在一个语句中
  • 好的,但是如果你解释一下为什么你有这个限制会有所帮助吗?无论如何,请参阅上面的编辑以获取替代解决方案。
【解决方案2】:

怎么样

IF condition1 AND condition2
    { do something }
ELSE 
    { message1 }

如果你不能同时加入两个语句,你可以使用某种 GOTO(ps:这是不好的做法)

IF condition1 
    IF condition2
        { do something }
    ELSE 
        GOTO ELSE_CODE
ELSE 
    :ELSE_CODE
    { message1 }

【讨论】:

  • 我需要不加入两个语句的解决方案,而且,正如你所说,带有指向另一部分代码的解决方案不是好的做法。
  • 我不会考虑这种不好的做法,但是 goto (如果代码中的跳转不是不合理的远)产生更简单、更短且更易于理解的代码的罕见情况之一 -尤其是与do ... while (false) hacks 相比。
【解决方案3】:

如果您谈论的是一种没有短路布尔评估的语言,您可以像这样手动实现它

flag = condition1 
IF flag
    flag = flag AND condition2
IF flag
    { do something }
ELSE 
    { message1 }

【讨论】:

    猜你喜欢
    • 2011-03-15
    • 1970-01-01
    • 2014-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2015-10-19
    相关资源
    最近更新 更多