哪种逻辑会更好或更有效:
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
答案 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)
转到此链接,将帮助您
答案 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次的内循环中运行,否则不要考虑它。