G.TYP.BOL.01 不宜使用块表达式作为控制表达式
【级别】 要求
【描述】
使用块表达式作为控制表达式,易引入带副作用的函数调用,导致程序运行逻辑和预期不符,代码的可 读性也同步变差。
Rust中的控制表达式包括:
- if语句
- while语句
- match语句
【反例】
Rust
// 不符合:可读性差,条件表达式容易被误认为是执行分支
if {
let filename = get_input_from_user();
let cur_dir = std::env::current_dir().unwrap(); let filepath = cur_dir.join(filename);
std::fs::OpenOptions::new()
.create_new(true)
.open(filepath)
.is_ok()
} {
// ...
}
【正例】
Rust
fn create_new_user_file() -> bool {
let filename = get_input_from_user();
let cur_dir = std::env::current_dir().unwrap(); let filepath = cur_dir.join(filename);
std::fs::OpenOptions::new()
.create_new(true)
.open(filepath)
.is_ok()
}
// 符合
if create_new_user_file() {
// ...
}
【反例】
Rust
fn main() {
// 不符合:使用块表达式
match {
println!("side effect"); std::env::var("PATH")
} {
Ok(_) => (),
_ => (),
}
}
【正例】
Rust
fn main() {
// 符合
match std::env::var("PATH") {
Ok(_) => (),
_ => (),
}
}