我对 if 语句有相当复杂的逻辑。我目前正在使用:
if(numerical_evaluation) {
if ((!boolOne && boolTwo) || !boolThree){
//do stuff
}
}
其中 boolOne、boolTwo 和 boolThree 是逻辑操作(可能是 x < y
或 'myObject->getBool' 等)。
我不知道有什么更好的方法可以在不嵌套 ||
的情况下使它易于阅读三分之一内的情况if
声明。
我遇到困难的原因是 or
运算符使它看起来像第三个if
声明可能是有根据的。
一个选择是这样做。
或者,我可以做类似的事情
if(x <= y) {
bool boolFour = false;
if ((!boolOne && boolTwo))
boolFour = true;
if (boolFour || !boolThree){
//do stuff
}
}
甚至可以创建一个单独的函数来尝试将所有内容或组合验证为单个返回值?
或者,我可以尝试以不需要的方式重构代码,这可能需要大量时间。
我的问题:格式化复杂 if
的最佳方法是什么?问题 - 其中包括比 if (!A && B && C)
更复杂的评估变化?当您包含 ||
时,事情似乎变得不可读(尤其是当您对 boolOne、boolTwo 等进行复杂的评估时)与 &&
结合的语句陈述成一行。从-Best way to format if statement with multiple conditions做同样的原则- 在这里也适用还是在使用各种逻辑运算符时存在根本差异?
最佳答案
这个:
bool boolFour = false;
if ((!boolOne && boolTwo))
boolFour = true;
可以更清楚地表达为:
bool const boolFour = !boolOne && boolTwo;
通过给 boolFour
一个好的、描述性的名称,这种分解复杂表达式和命名子表达式的方法可以使代码更易读、更容易理解,并且更容易调试。
如果一个复杂的表达式在多个地方使用,应该使用一个函数来封装公共(public)逻辑。但是,如果表达式仅在一个地方使用,则最好在本地分解表达式并使用命名的 const 变量,以使逻辑靠近使用它的地方。
关于C++ 嵌套 If 语句的可读性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12150207/