G.FUD.01 函数参数最长不要超过五个

【级别】 建议

【描述】

为了提升代码可读性,函数的参数最长不宜超过五个。

【反例】


#![allow(unused)]
fn main() {
struct Color;
// 不符合
fn foo(x: f32, y: f32, name: &str, c: Color, w: u32, h: u32, a: u32, b: u32) {
    // ..
}
}

【正例】

想办法把过长的参数缩短。

struct Color;
// 符合:此处使用 常量泛型(const generic) 来接收后面多个 u32 类型的参数
// 使用元组 缩短 2~3 个参数为一个参数
fn foo<T, const N: usize>(x: (f32, f32), name: &str, c: Color, last: [T; N]) {
    ;
}

fn main(){
    let arr = [1u32, 2u32];
    foo((1.0f32, 2.0f32), "hello", Color, arr);
    let arr = [1.0f32, 2.0f32, 3.0f32];
    foo((1.0f32, 2.0f32), "hello", Color, arr);
}

【Lint 检测】

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

该 lint 对应 clippy.toml 配置项:

# 函数参数最长不要超过5个
too-many-arguments-threshold=5