Rust初习录(6)Rust的 if 玩法

Rust 的 if 写法看起来简单,但"玩法"其实比 Java / C++ 丰富很多,因为它是 表达式(expression)而不是语句(statement) ,还能和 let / match / Option 等组合出很多高级用法。

下面按我们一起来看


一、基础 if(但已经和 Java 不一样了)

复制代码
let age = 18;

if age >= 18 {
    println!("成年人");
} else {
    println!("未成年");
}

二、🔥 Rust 的关键特性:if 是表达式

👉 可以直接返回值!

复制代码
let age = 18;

let status = if age >= 18 {
    "adult"
} else {
    "minor"
};

println!("{}", status);

✔ 对比 Java

Java:

复制代码
String status = age >= 18 ? "adult" : "minor";

Rust:

复制代码
let status = if age >= 18 { "adult" } else { "minor" };

👉 Rust 没有三目运算符 ?:,用 if 替代


三、if 必须"类型一致"(非常重要)

复制代码
let x = 5;

let result = if x > 0 {
    10
} else {
    20
};

❌ 错误写法:

复制代码
let result = if x > 0 {
    10
} else {
    "no"
};

👉 Rust 强类型:if 两边必须同类型


四、if + let(简化 Option / Result)

这是 Rust 最经典玩法之一 👇

1)Option 解包

复制代码
let some_value = Some(10);

if let Some(v) = some_value {
    println!("value = {}", v);
}

👉 等价于:

复制代码
match some_value {
    Some(v) => println!("{}", v),
    _ => {}
}

2)Result 简化

复制代码
let res: Result<i32, &str> = Ok(100);

if let Ok(v) = res {
    println!("success: {}", v);
}

五、if + else if(链式判断)

复制代码
let score = 85;

let grade = if score >= 90 {
    "A"
} else if score >= 80 {
    "B"
} else if score >= 60 {
    "C"
} else {
    "D"
};

👉 Rust 推荐写法(比 Java 更"表达式化")


六、if 在函数 return 中(非常 Rust)

复制代码
fn check(age: i32) -> &'static str {
    if age >= 18 {
        return "adult";
    }
    "minor"
}

👉 这里 "minor" 是隐式 return(没有分号)


七、if + 块表达式(可以写复杂逻辑)

复制代码
let result = if {
    let x = 5;
    x > 3
} {
    "big"
} else {
    "small"
};

👉 Rust 允许 if 条件是一个表达式块


八、if + loop / break(进阶玩法)

复制代码
let result = loop {
    if true {
        break 100;
    }
};

👉 loop + if + break = 返回值


九、if let + else(完整控制流)

复制代码
let opt = Some(5);

if let Some(v) = opt {
    println!("value = {}", v);
} else {
    println!("none");
}

十、Rust if 的核心思想总结

⭐ Rust if 的本质:

if 是"表达式",不是"语句"

相关推荐
聆风吟º2 小时前
【C标准库】深入理解C语言 isalpha 函数详解:判断字符是否为字母
c语言·开发语言·库函数·isalpha
Jetev2 小时前
不同品牌SSD对HTML函数工具加载速度影响大吗_存储测试汇总【汇总】
jvm·数据库·python
gf13211112 小时前
python_【更新已发送的消息卡片】
java·前端·python
WL_Aurora2 小时前
Java字符输入全攻略
java·开发语言
keineahnung23452 小时前
PyTorch SymNode 為何找不到方法實作?──sizes_strides_methods 動態安裝機制解析
人工智能·pytorch·python·深度学习
2501_901006472 小时前
golang如何使用DTM分布式事务框架_golang DTM分布式事务框架使用方法
jvm·数据库·python
2501_901200533 小时前
Golang如何做Clean Architecture_Golang整洁架构教程【详解】
jvm·数据库·python
weixin_459753943 小时前
Go 中嵌入类型字段在派生结构体字面量中的初始化规则详解
jvm·数据库·python
CLX05053 小时前
HTML5中Mediastream实现摄像头画面实时捕获
jvm·数据库·python