对于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
是我最喜欢的东西