G.CTF.01 当需要通过多个if判断来比较大小来区分不同情况时,优先使用matchcmp来代替if表达式

【级别】 建议

【描述】

在使用多个if-else来对不同情况进行区分时,使用 matchcmp 代替 if 的好处是语义更加明确,而且也能帮助开发者穷尽所有可能性。 但是这里需要注意这里使用 matchcmp 的性能要低于 if表达式,因为 一般的 >< 等比较操作是内联的,而 cmp方法没有内联。

【反例】


#![allow(unused)]
fn main() {
fn a() {}
fn b() {}
fn c() {}
fn f(x: u8, y: u8) {
    // 不符合
    if x > y {
        a()
    } else if x < y {
        b()
    } else {
        c()
    }
}
}

【正例】


#![allow(unused)]
fn main() {
use std::cmp::Ordering;
fn a() {}
fn b() {}
fn c() {}
fn f(x: u8, y: u8) {
    // 符合
     match x.cmp(&y) {
         Ordering::Greater => a(),
         Ordering::Less => b(),
         Ordering::Equal => c()
     }
}
}

【Lint 检测】

lint nameClippy 可检测Rustc 可检测Lint Grouplevel
comparison_chainyesnostylewarn