G.STR.04 需要辨别字符串的字符开头或结尾字符时,不应按字符迭代比较

【级别】 建议

【描述】

Rust 语言核心库和标准库都对字符串内置了一些方便的方法来处理这类需求。

迭代字符的性能虽然也很快(对500多个字符迭代转义处理大概需要4.5微秒左右),但这种场景用迭代的话,代码可读性更差一些。

【反例】


#![allow(unused)]
fn main() {
let name = "_";
// 不符合
name.chars().last() == Some('_') || name.chars().next_back() == Some('-');

let name = "foo";
// 不符合
if name.chars().next() == Some('_') {};
}

【正例】


#![allow(unused)]
fn main() {
let name = "_";
// 符合
name.ends_with('_') || name.ends_with('-');

let name = "foo";
// 符合
if name.starts_with('_') {};
}

【Lint 检测】

lint nameClippy 可检测Rustc 可检测Lint Grouplevel
chars_last_cmpyesnostylewarn
chars_next_cmpyesnostylewarn