Cobol if语句

时间:2011-12-27 11:15:40

标签: cobol

哪种逻辑会更好或更有效:

IF VAR-A = FALSE
   MOVE VAR-C TO VAR-B
ELSE
   MOVE VAR-A TO VAR-B
END-IF

MOVE VAR-A TO VAR-B
IF VAR-A = FALSE
   MOVE VAR-C TO VAR-B
END-IF

5 个答案:

答案 0 :(得分:3)

我更喜欢这个:

IF VAR-A = TRUE
   MOVE VAR-A TO VAR-B
ELSE
   MOVE VAR-C TO VAR-B
END-IF

一般来说,很难在if false上阅读采取行动,因此我更倾向于积极地陈述事情。而且我认为效率差异并不重要(特别是如果你使用的是COBOL)。无论如何,编译器通常会做正确的事情。

答案 1 :(得分:2)

一般来说,两者都很好,您应该将优化留给编译器。

然而,由于源代码是为人类编写的,以便了解先前程序员创建的内容,我会说:

如果可能出现任何一种情况,请使用此表格:

IF VAR-A = FALSE
   MOVE VAR-C TO VAR-B
ELSE
   MOVE VAR-A TO VAR-B
END-IF

但是,如果IF条件是一种非常罕见的事情,并且不合格的MOVE是99%的条件,请尝试这种方法,因为它突出了VAR-A = FALSE是一种罕见且特殊的事实:

MOVE VAR-A TO VAR-B
IF VAR-A = FALSE
   MOVE VAR-C TO VAR-B
END-IF

仅我的NSH 0.02美元。只要你记得编译器会占用你提供的大部分废话,要么你的主要关注点是下一个必须阅读你的程序的人。

答案 2 :(得分:1)

转到此链接,将帮助您

The IF Statement

答案 3 :(得分:1)

但我更喜欢这种编码方式,

MOVE VAR-A TO VAR-B
IF VAR-A = FALSE
   MOVE VAR-C TO VAR-B
END-IF

这是因为,为了处理/执行条件/ loops / evaluate语句,编译器需要注意它们并为此编写等效的编译器代码。

For instance, if we have scenarios where FALSE scenario occurs for less than 50% then we can move the value into the variable for TRUE always, which may avoid going into the IF and IF with no ELSE is always less complex.

你说什么?

答案 4 :(得分:1)

第一个更有效率,除非VAR-A 从不 false(在这种情况下只需删除它)。条件必须始终运行,并且必须始终进行一项分配,因此这是最佳的:

IF VAR-A = FALSE
   MOVE VAR-C TO VAR-B
ELSE
   MOVE VAR-A TO VAR-B
END-IF

就个人而言,我更喜欢首先评估真实条件,以便于阅读。

IF VAR-A = TRUE
   MOVE VAR-A TO VAR-B
ELSE
   MOVE VAR-C TO VAR-B
END-IF

没有性能差异,因为无论哪种方式,它都是一个分支。如果您要检查多个值,则总是希望将最常见的值放在首位。

EVALUATE TRUE
  WHEN VAR-A = TRUE
    MOVE VAR-A TO VAR-B
  WHEN VAR-C = TRUE
    MOVE VAR-C TO VAR-B
  WHEN OTHER
    this is slower, because it had to do two condition checks to get here
    MOVE VAR-C TO VAR-B
END-EVALUTE

但是,这不适用于简单的IF,如您所见:

IF condition
   no effort to get here
   assignment cost is constant
   one go-to to get to the next line
ELSE
   one go-to to get here
   assignment cost is constant
   no effort to get to the next line
END-IF

但这真的是挑剔。我们在这里谈论几个指示。除非这是在每分钟运行1,000,000次的内循环中运行,否则不要考虑它。