Skip to content

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 {
    // ...
  } 
}