G.TYP.BOL.03 && 和 || 操作符的右侧操作中不应包含副作用
【级别】 建议
【描述】
逻辑与(&&)、逻辑或(||)表达式中的右侧操作是否被执行,取决于左操作的求值结果,当左操作的 求值结果可以得出整个逻辑表达式的结果时,不会再计算右操作的结果。
如果右操作包含副作用,则不能确定是否确实发生了副作用。
【说明】
副作用是指对执行状态产生影响,包括:修改对象、修改文件等。在某些情况下副作用会给程序带来不 必要的麻烦,降低程序的可读性,其产生的错误也难以查找。
【反例】
Rust
// 不符合
if flag > 0 || fs::remove_file("example.txt").is_ok() {
// ...
}
【正例】
Rust
// 符合
if flag > 0 {
// ...
} else {
let removed = fs::remove_file("example.txt").is_ok();
if removed {
// ...
}
}