我有四个 bool
值:
bool bValue1;
bool bValue2;
bool bValue3;
bool bValue4;
可接受的值为:
Scenario 1 | Scenario 2 | Scenario 3
bValue1: true | true | true
bValue2: true | true | false
bValue3: true | true | false
bValue4: true | false | false
因此,例如,这种情况是不可接受的:
bValue1: false
bValue2: true
bValue3: true
bValue4: true
目前我想出了这个 if
语句来检测不良情况:
if(((bValue4 && (!bValue3 || !bValue2 || !bValue1)) ||
((bValue3 && (!bValue2 || !bValue1)) ||
(bValue2 && !bValue1) ||
(!bValue1 && !bValue2 && !bValue3 && !bValue4))
{
// There is some error
}
可以改进/简化该语句逻辑吗?
原文由 Andrew Truckle 发布,翻译遵循 CC BY-SA 4.0 许可协议
我的目标是可读性:你只有 3 个场景,用 3 个单独的 if 处理它们:
恕我直言,易于阅读和调试。此外,您可以分配一个变量
whichScenario
同时继续if
。只有 3 个场景,我不会选择“如果前 3 个值是真的,我可以避免检查第四个值”这样的东西:它会让你的代码更难阅读和维护。
不是一个优雅的解决方案也许当然,但在这种情况下是可以的:简单易读。
如果您的逻辑变得更复杂,请丢弃该代码并考虑使用更多内容来存储不同的可用场景(正如 Zladeck 所建议的那样)。
我真的很喜欢 这个答案 中给出的第一个建议:易于阅读,不易出错,可维护
(几乎)题外话:
我不会在 StackOverflow 上写很多答案。非常有趣的是,上述接受的答案是迄今为止我历史上最受赞赏的答案(在我认为之前从未有超过 5-10 次投票),而实际上并不是我通常认为的“正确”方法。
但简单往往是“正确的做法”,很多人似乎都这么认为,我应该比我想得更多:)