P.TYP.SLC.01 宜使用切片迭代器来代替手工索引

【描述】

在 for 循环中使用索引是比较常见的编程习惯,但是这种方式是最有可能导致边界错误的。

利用 切片自带的方法,并利用迭代器,可以避免这种错误。

【反例】


#![allow(unused)]
fn main() {
let points: Vec<Coordinate> = ...;
let differences = Vec::new();

// 不符合:人工计算长度选择范围很可能会出错
for i in 1..points.len() [
  let current = points[i];
  let previous = points[i-1];
  differences.push(current - previous);
]
}

【正例】


#![allow(unused)]
fn main() {
let points: Vec<Coordinate> = ...;
let mut differences = Vec::new();

// 符合:切片提供 windows 或 array_windows 方法返回迭代器
for [previous, current] in points.array_windows().copied() {
    differences.push(current - previous);
}
}