学习 Rust 的第五天:了解程序的基本控制流程

devtools/2024/10/22 15:31:48/

大家好呀

欢迎来到这个学习 Rust 的 30 天系列的第五天,今天我们将深入了解 Rust 中的控制流。

控制流,顾名思义,根据条件来 控制程序的流程

If 表达式

当你想要在满足条件时执行一段代码块时,可以使用 if 表达式。

示例

rust">fn main(){  let age: u32 = 17;  if age > 18{  println!("你已经成年了");  }  
}

这个程序会检查年龄是否大于 18。如果是,它会输出“你已经成年了”。

那如果条件不满足时要输出什么呢?

Else 表达式

当某个条件不满足时,可以使用 else 表达式来执行一段代码块。

rust">fn main(){  let age: u32 = 17  if age>18{  println!("你已经成年了");  }else{  println!("你还不是成年人");  }  
}

这个程序会检查年龄是否大于 18。如果是,它会输出“你已经成年了”,否则会输出“你还不是成年人”。

Else If 表达式

else if 表达式可以用来检查多个条件。例如:

rust">fn main(){  let number = 92;  if number % 9 == 0{  println!("数字可以被 9 整除");  } else if number % 5 == 0{  println!("数字可以被 5 整除");  }else if number % 3 == 0{  println!("数字可以被 3 整除");  }else{  println!("数字不能被 9、5、3 整除");  }  
}

循环

循环用于重复执行一段代码,直到明确指定停止,或满足某个条件。

loop 关键字

loop 关键字告诉 Rust 运行一段代码块,直到使用 break 关键字停止。

rust">fn main() {  let mut i: u32 = 0;  let mut j: i32 = 10;// 带有 break 语句的有标签的无限循环  'counting_down: loop {  if j >= 0 {  println!("{}", j);  j -= 1;  } else {  println!("倒计时循环完成");  break 'counting_down;  }  }  
}

解释:

  • main 函数是 Rust 程序的入口点。
  • j 是类型为 i32(有符号 32 位整数)的变量,初始化为 10。
  • 代码进入一个带有标签的无限循环,标记为 'counting_down
  • 循环内部有一个条件语句,检查 j 是否大于或等于 0。
  • 如果为真,则使用 println! 打印 j 的当前值,并将 j 减 1。
  • 如果为假(当 j 小于 0 时),则打印一条消息并跳出标记为 'counting_down 的循环。
  • 循环会一直进行,直到执行 break 'counting_down; 语句。
  • 标签 'counting_down 用于指定要跳出的循环,特别是在处理嵌套循环时。

While 循环

while 循环会在指定条件为真时重复执行一段代码块。

示例:
rust">fn main(){  let mut num: u8 = 4;  while num!=0 {  println!("{}",num);  num-=1;  }  
}

解释:

  • 声明一个可变变量 num,并将其初始化为值 4。它的类型是 u8(无符号 8 位整数)。
  • 代码进入一个 while 循环,条件为 num != 0
  • 循环内部使用 println! 打印 num 的当前值。
  • 然后使用 num -= 1; 语句将 num 的值减 1。
  • 循环会在条件 num != 0 为真时继续。
  • 程序会按照从初始值(4)开始的递减顺序打印 num 的值,直到变为 0。
  • 一旦 num 变为 0,循环结束,程序继续执行循环外的任何后续代码。

For 循环

for 循环会遍历范围、集合或迭代器,对每个迭代执行一段代码块。

示例:
rust">fn main(){  // 数组的 for 循环  let array: [u8; 10] = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100];  println!("使用 for 循环访问数组");  for item in array {  println!("{}", item);  }// 范围内的 for 循环  println!("范围内的 for 循环 ");  for number in 0..=5 {  println!("{number}");  }  println!("范围内的 for 循环(反向)");  for number in (0..=5).rev() {  println!("{number}");  }  
}

总结

控制流是任何编程语言中非常重要的一部分。这也是我把一整天都用来学习这个的原因。明天我会继续探讨 Rust 中的所有权和内存管理。欢迎大家持续关注,一起学习哦。


http://www.ppmy.cn/devtools/6887.html

相关文章

网络邻居没有显示群晖NAS,但能通过IP访问?

问题描述 内网,通过路由器连接NAS,电脑可ping通NAS。设置群晖NAS后,添加了共享文件夹,可以通过\ip地址的方式进行访问。但是在网络里却发现不了NAS。通过\NAS名的方式也不行。 只是想在网络里发现NAS,并通过网络邻居…

【gradle】idea创建的gradle项目每个mudule有多余的iml文件

idea创建的gradle项目每个mudule有多余的iml文件 比如: module_name.iml module_name.main.iml module_name.test.iml 文件&#xff0c;而且每个module都有。 只需要在项目根目录的.idea文件夹下的gradle.xml文件添加<option name"resolveModulePerSourceSet" va…

抓取电商产品数据的方法|电商平台商品详情数据|批量上架|商品搬家|电商封装API数据采集接口更高效安全的数据采集

大量级电商数据采集时使用电商API接口有以下优势&#xff1a; 1. 数据准确性&#xff1a;通过电商API接口获取数据&#xff0c;可以保证数据的准确性和实时性&#xff0c;避免了手动采集可能出现的错误和延迟。 2. 自动化采集&#xff1a;API接口可以实现自动化的数据获取和更…

【rust简单工具理解】

1.map方法 map这个闭包的本质就是映射 let numbers vec![1, 2, 3, 4, 5]; let numbers_f64: Vec<f64> numbers.into_iter().map(|&x| x as f64).collect(); println!("{:?}", numbers_f64); // 输出: [1.0, 2.0, 3.0, 4.0, 5.0]2.and_then and_then …

java-Spring-入门学习-第二天(单例模式和多例模式)

目录 Bean作用域 单例模式(默认可以不写) Spring下的 AutoWired 依赖注入 JaveEE下的 Resource 依赖注入 多例模式 Bean作用域 ​在Spring框架中&#xff0c;Bean是按照作用域来创建的&#xff0c;常见的作用域有两种&#xff1a;Singleton 和 Prototype。Singleton (单例…

ubuntu22.04 安装并使用 DirBuster

DirBuster是一个用于对Web应用程序进行目录和文件名枚举的工具&#xff0c;通常来说它是一个独立的Java程序&#xff0c;所以你应该看到一个.jar文件&#xff0c;而不是PHP文件。 要下载DirBuster&#xff0c;你需要访问OWASP的官方资源或者使用搜索引擎找到合适的下载链接。一…

nginx 导致websocket无法连接的解决办法

答&#xff1a;在config配置文件中 map $http_upgrade $connection_upgrade { default upgrade; close; } server { listen 443 ssl; server_name your_domain.com; ssl_certificate /path/to/ssl_certificate.crt; ssl_certificate_key /path/to/…

stm32_HAL_串口不定长数据接收发送

串口代码思路//不包括初始化 变量 uint8_t tx1[256];//缓冲区uint8_t Tx1_size0;//记录数据的个数 接收 产生第一个数据接收-----进入中断----复制数据-----继续接收----在进入中断----复制数据---在接收直到串口第一次数据全部接收完 中断源码 利用中断经行计算字符个数…