我正在使用 C/C++ 中的一个布尔函数来验证多个条件(它们本身就是布尔函数),并且只有在所有条件都为true时才返回true。
前段时间我开始使用 Guard Clauses 而不是嵌套的if s,即使它需要有多个返回,如下所示:
bool foo(){
//some initialization
if( !condition_1() ){
return false;
}
if( !condition_2() ){
return false;
}
...
if( !condition_n() ){
return false;
}
return true;
}
但现在我问自己,仅使用一个布尔逻辑返回是否是一个不错的选择,例如:
bool foo(){
//some initialization
return condition_1() && condition_2() && ... && condition_n() ;
}
我没有任何代码可以在守卫之后运行,而且只有少数几个,所以 return 语句不是那么拥挤,代码也不难阅读。这个想法是避免嵌套if s 并在我的函数中只使用一个退出点。
我测试了代码,它运行良好,即使 condition_1() 对 condition_2() 进行了一些更改。所以我知道保护条款代码和这个版本是等价的,执行顺序是从左到右保持的。那是对的吗?是否有任何隐藏的差异使两个版本不是 100% 等效?
谢谢!