对于2个条件的并集,使用IF或COBOL中的EVALUATE?
“如果有用,不要碰它”…我理解。也就是说,我正在扩展的代码中布满了这样的块:对于2个条件的并集,使用IF或COBOL中的EVALUATE?,cobol,Cobol,“如果有用,不要碰它”…我理解。也就是说,我正在扩展的代码中布满了这样的块: EVALUATE TRUE ALSO TRUE WHEN FOO-YES ALSO BAR-YES PERFORM ACTION WHEN OTHER SET ERROR TO TRUE END-EVALUATE 在我缺乏经验的眼中,如果看起来更清楚: IF FOO-YES AND BAR-YES PERFORM ACTION ELSE SET ERROR TO TRUE E
EVALUATE TRUE ALSO TRUE
WHEN FOO-YES ALSO BAR-YES
PERFORM ACTION
WHEN OTHER
SET ERROR TO TRUE
END-EVALUATE
在我缺乏经验的眼中,如果看起来更清楚:
IF FOO-YES AND BAR-YES
PERFORM ACTION
ELSE
SET ERROR TO TRUE
ENDIF
在编写新功能时,是否有理由选择“求值”而不是“如果阅读正确”。“真的也是真的”对于编码来说是一件非常奇怪的事情
通常,您会看到“Evaluate True”,在这种情况下,when条件的行为与IF语句完全相同。使用还引入了一些可能的奇怪之处,因为它与所有其他语言的CASE语句不同
写这篇文章的更好方法是:
Evaluate true
when FOO-YES and BAR-YES
perform action
when other
set error to true
End-Evaluate
诚然,真的也是真的很容易理解,但是你可能有真的WS-BLAH-BLAH,这可能会让人困惑。Cobol Evaluate动词非常强大,有时很容易击中自己的脚。也就是说,它非常强大,可以让你做很多事情
通常情况下,不干净嵌套的复杂IF可以通过编写良好的评估很好地解决。您读对了。“真的也是真的”对于编码来说是一件非常奇怪的事情
通常,您会看到“Evaluate True”,在这种情况下,when条件的行为与IF语句完全相同。使用还引入了一些可能的奇怪之处,因为它与所有其他语言的CASE语句不同
写这篇文章的更好方法是:
Evaluate true
when FOO-YES and BAR-YES
perform action
when other
set error to true
End-Evaluate
诚然,真的也是真的很容易理解,但是你可能有真的WS-BLAH-BLAH,这可能会让人困惑。Cobol Evaluate动词非常强大,有时很容易击中自己的脚。也就是说,它非常强大,可以让你做很多事情
通常情况下,不干净嵌套的复杂IF可以通过编写良好的Evaluate很好地解决。没有理由选择Evaluate而不是IF。我知道,但我没有充分的理由。我试图编写代码,以便维护人员易于理解,但在某些情况下,逻辑会很复杂,最终会出现类似于
EVALUATE TRUE ALSO TRUE ALSO TRUE
WHEN INITIAL-STATE ALSO ANY ALSO ANY
PERFORM 0100-INITIALIZE
PERFORM 1000-DISPLAY-MENU
WHEN MENU-DISPLAYED ALSO DFHRESP(NORMAL) ALSO UPDATE-REQUESTED
PERFORM 2000-DO-THE-UPDATE
EXEC CICS RETURN END-EXEC
[...and so forth...]
END-EVALUATE
有一句话是关于事情应该尽可能简单,但不应该更简单。当然,有很多方法可以编写相同的逻辑。不同的人发现不同的结构更容易理解。许多争论都是因为这些差异而产生的。没有理由更喜欢评估而不是假设。我知道,但我没有充分的理由。我试图编写代码,以便维护人员易于理解,但在某些情况下,逻辑会很复杂,最终会出现类似于
EVALUATE TRUE ALSO TRUE ALSO TRUE
WHEN INITIAL-STATE ALSO ANY ALSO ANY
PERFORM 0100-INITIALIZE
PERFORM 1000-DISPLAY-MENU
WHEN MENU-DISPLAYED ALSO DFHRESP(NORMAL) ALSO UPDATE-REQUESTED
PERFORM 2000-DO-THE-UPDATE
EXEC CICS RETURN END-EXEC
[...and so forth...]
END-EVALUATE
有一句话是关于事情应该尽可能简单,但不应该更简单。当然,有很多方法可以编写相同的逻辑。不同的人发现不同的结构更容易理解。许多争论都是因为这些差异而产生的。我可以说,在某些情况下,这让生活变得轻松。比如说,我们将在哪里添加另一个条件,根据这个条件我们可能需要执行不同的代码块;在这种情况下,在时附加另一个
比在
时调整上的条件更容易。以下是将当
与如果
上的调整条件进行比较时的要点:
- 根据要执行的
段落
,我们可以在需要时提供尽可能多的
如果
条件在使用或
或和
参数时容易出错
- 另外,
WHEN
清楚地描述了事物在何处流动,因为在分析IF
(s)时,我们可能必须调整眼镜。[当我们有复杂的循环时可能会发生这种情况,但作为一个高效的程序员,我们应该预测这种情况]
- 最后但并非最不重要的一点是,用较少的
IFs
将代码重新修改回以前的状态将很容易
但是在你目前的情况下,我觉得评估和如果之间没有太多的清晰性和区别。所以,选择一个能让你快乐的:)我可以说,在某些情况下,这会让生活变得轻松。比如说,我们将在哪里添加另一个条件,根据这个条件我们可能需要执行不同的代码块;在这种情况下,在
时附加另一个比在
时调整上的条件更容易。以下是将当
与如果
上的调整条件进行比较时的要点:
- 根据要执行的
段落
,我们可以在需要时提供尽可能多的
如果
条件在使用或
或和
参数时容易出错
- 另外,
WHEN
清楚地描述了事物在何处流动,因为在分析IF
(s)时,我们可能必须调整眼镜。[当我们有复杂的循环时可能会发生这种情况,但作为一个高效的程序员,我们应该预测这种情况]
- 最后但并非最不重要的一点是,用较少的
IFs
将代码重新修改回以前的状态将很容易
但是在你目前的情况下,我觉得评估和如果之间没有太多的清晰性和区别。所以,选择一个让你高兴的:)对我来说,这一切都归结于可读性(因此,以后的维护更简单)
当我查看您问题中的两个代码段时,我发现IF
块的可读性要高得多
在22年的Cobol编程中,我从未在评估中使用过。
使用EVALUATE
块进行简单的二进制真/假测试对我来说似乎有点迟钝
但别误会我的意思,如果使用得当,我喜欢EVALUATE
s。当我6年前开始用Java编程时,EVALUATE
是我最喜欢的东西