rust编程-通用编程概念(chapter 3.4 3.5 注释和控制语句)
创始人
2024-02-16 07:50:56
0

目录

4. 注释

5. 控制流

5.1 if表达式

5.2 循环(loop、while和for)


4. 注释

与C/C++一致,Rust使用//起始注释文本内容,使用/*和*/来注释跨行文本内容。

5. 控制流

同其它编程语言,rust有自己的条件分支和循环支持。

5.1 if表达式

If以及可选的else/else if使用如下:

fn main() {let number = 6;if number % 4 == 0 {println!("number is divisible by 4");} else if number % 3 == 0 {println!("number is divisible by 3");} else if number % 2 == 0 {println!("number is divisible by 2");} else {println!("number is not divisible by 4, 3, or 2");}
}

关于if条件判断,与其它编程语言有一个很重要的区别:rust不会自动转换非boolean类型为boolean类型,这里的条件必须是boolean类型。 如下是错误的代码,编译会报错:

fn main() {let number = 3;// if number != 0 {if number {println!("number was three");}
}

使用太多的else if判断,会让代码显得混乱,第6章将介绍match分支

if表达式另一个不同于C语言的特性是:if可以用作语句的右值中,这是因为if是表达式,有返回值。此时,if和else的两个分支返回的表达式值必须是相同类型。

如下:

fn main() {let condition = true;// if和else返回的表达式值类型不相同,编译出错// let number = if condition { 5 } else { "six" }; let number = if condition { 5 } else { 6 };println!("The value of number is: {}", number);
}  

{}括住的代码块的返回值是其中最后一个表达式的值

5.2 循环(loop、while和for)

  • loop循环

loop关键词对{}代码块的代码进行循环执行,直到跳出循环。

fn main() {loop {println!("again!");}
}

在循环中,可以使用:

1)break

打断循环(跳出),到当前循环层外的第一条语句开始执行。

2) continue

忽略循环代码库中,此处之后的指令,返回到最内层循环代码块开始处执行下一轮循环。

Rust loop循环有C语言没有的两个特性:

1)loop标签

对多层循环,可以指定每一层loop循环的标签,这样break和continue就可以指定跳出或继续到特定的loop标签。

fn main() {let mut count = 0;'counting_up: loop {println!("count = {}", count);let mut remaining = 10;loop {println!("remaining = {}", remaining);if remaining == 9 {break; // 只退出当前循环}if count == 2 {break 'counting_up; // 退出外层循环}remaining -= 1;}count += 1;}println!("End count = {}", count);
}

2)loop返回值

在break跳出循环时,可以用break表达式带回一个返回值。 该返回值可以作为loop的返回值(暗示:有返回值,loop也是表达式?),如下:

fn main() {let mut counter = 0;let result = loop {counter += 1;if counter == 10 {break counter * 2;}};println!("The result is {}", result);
}
  • 有条件的while循环

在进入循环前,可能需要判断循环条件,rust同样支持while的有条件循环。while是Rust内置的一个语言构造器。

fn main() {let mut number = 3;while number != 0 {println!("{}!", number);number -= 1;}println!("LIFTOFF!!!");
}
  • for迭代循环

Rust支持for循环,来循环迭代集合中的每一个元素,并执行一定的指令。

fn main() {let a = [10, 20, 30, 40, 50];for element in a {println!("the value is: {}", element);}
}

for循环的安全性和简洁性使其成为Rust中最常用的循环结构。在需要运行特定循环次数的某些指令代码时,可以使用标准库提供的一个Range,它按顺序生成所有数字,从一个数字开始,到另一个数字之前结束。如下:

fn main() {//     for number in (1..4) {for number in (1..4).rev() { // rev, to reverse the rangeprintln!("{}!", number);}println!("LIFTOFF!!!");
}

for循环的安全性体现在:不必像while那样手动维护循环的条件,就不会导致编码错误导致的循环次数不符合预期的情况。

关于作者:

犇叔,浙江大学计算机科学与技术专业,研究生毕业,而立有余。先后在华为、阿里巴巴和字节跳动,从事技术研发工作,资深研发专家。主要研究领域包括虚拟化、分布式技术和存储系统(包括CPU与计算、GPU异构计算、分布式块存储、分布式数据库等领域)、高性能RDMA网络协议和数据中心应用、Linux内核等方向。

专业方向爱好:数学、科学技术应用

关注犇叔,期望为您带来更多科研领域的知识和产业应用。

内容坚持原创,坚持干货有料。坚持长期创作,关注犇叔不迷路

相关内容

热门资讯

AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWR报告解读 WORKLOAD REPOSITORY PDB report (PDB snapshots) AW...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
群晖外网访问终极解决方法:IP... 写在前面的话 受够了群晖的quickconnet的小水管了,急需一个新的解决方法&#x...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
Azure构建流程(Power... 这可能是由于配置错误导致的问题。请检查构建流程任务中的“发布构建制品”步骤,确保正确配置了“Arti...