为什么以析取范式表达代码很重要?

J T*_*J T 5 language-agnostic logic software-quality boolean-expression

在我工作的公司,最近有一项规定,所有“高度可见”的布尔逻辑都必须以析取范式表示。

例如(尽管这个概念与语言无关),

#if (defined(A) || defined( B )) || (defined(C) && defined(D))
Run Code Online (Sandbox Code Playgroud)

必须替换为:

#if defined(A) || (defined(C) && defined(D)) || defined(B)
Run Code Online (Sandbox Code Playgroud)

强制要求代码必须以这种方式表达的动机是什么?有什么优点?

Kri*_*son 5

优点是,在代码库中的任何地方以规范/标准化形式表达此类逻辑将(理论上)使程序员更容易理解和维护它。

如果没有这样的规则,一些程序员很容易尝试“优化”表达式,从而使维护人员难以解开它。此外,如果有必要,通用形式可以更轻松地编写新表达式。

(这些优点是有争议的。与任何风格指南一样,遵循一致的规则比选择一种规则更重要。)