为什么说 Rust 没有 null?深入解析 Option<T> 与 Result<T, E>,掌握 match 穷尽性检查与 if let 语法糖。

1. 极其强大的带数据枚举

Rust 的枚举不仅是数字标记,还可以携带任意类型的数据(类似于代数数据类型 ADT):

enum Message {
    Quit,
    Move { x: i32, y: i32 },
    Write(String),
    ChangeColor(i32, i32, i32),
}

2. Option<T> 替代 Null

通过标准库的 Option<T>,编译器强制开发者在编译期显式处理为空的分支,彻底杜绝生产环境的 NullPointerException:

fn plus_one(x: Option<i32>) -> Option<i32> {
    match x {
        None => None,
        Some(i) => Some(i + 1),
    }
}