Rust学习之旅——基本控制流

if / else if / else

Rust的条件判断不需要括号,所有常见的逻辑运算符依然适用。

fn main() {
	let x = 42;
	if x < 42 {
		println!("less than 42");
	} else if x == 42 {
		println!("is 42");
	} else {
		println!("greater than 42");
	}
}

循环

单纯的循环可以用loop实现,使用break退出循环

fn main() {
	let mut x = 0;
	loop {
		x += 1if x == 42 {
			break;
		}
	}
	println!("{}", x);
}

while

while 允许给循环加上条件,一旦条件变为 false ,循环就会退出

fn main() {
	let mut x = 0;
	while x != 42 {
		x += 1;
	}
}

for

rust的for是一个强大的升级。他遍历来自计算结果为迭代器的任意表达式的值。
迭代器是什么?迭代器是一个你可以一直询问“下一项是什么?”直到没有其他项的对象。

. . 运算符创建一个可以生成包含起始数字,但不包含末尾数字的数字序列的迭代器。
. .= 运算符创建一个可以生成包含起始数字,且包含末尾数字的数字序列的迭代器。

fn main() {
	for x in 0..5 {
		println!("{}", x);
	}

	for x in 0..=5 {
		println!("{}", x);
	}
}

match

类似于C语言中的switch语句,rust中的match语句用于匹配值的所有可能条件,并在匹配为真时执行相应代码。它不仅支持匹配数字,还支持更多更复杂的数据模式匹配。

match的意思的穷尽的,意在表明所有可能的值都要被考虑到。

匹配和解构相结合是章节目前为止接触到的最常见的模式之一。

fn main() {
	let x = 42;
	
	match x {
	0 => {
		println!("found zero");
	}
	// 我们可以匹配多个值
	1 | 2 => {
		println!("found 1 or 2");
	}
	// 可以匹配迭代器
	3..=9 => {
		println!("found a number 3 to 9 inclusively");
	}
	// 可以将匹配值绑定到变量
	matched_num @ 10..=100 => {
		println!("found {} number between 10 and 100!", matched_num);
	}
	// 默认匹配,如果没有可以处理所有情况,在必须存在该匹配
	_ => {
		println!("found somthing else!");
	}
	}
}

从循环中返回值

loop可以被中断以返回一个值。

fn main() {
	let mut x = 0;
	let v = loop {
		x += 1;
		if x == 13 {
			break "found the 13";
		}
	};
	println!("from loop: {} ", v);
}

从块表达式返回值

if,match,函数,以及作用域都有一种返回值的独特方式。

如果if、match、函数或作用域的最后一条语句是不带 ; 的表达式,rust 将把它作为一个值从块中返回。这是一种创建简洁逻辑的好方法,它返回一个 可以放入新变量的值。

注意,它还允许 if 语句像简洁的三元表达式一样操作。

fn example() -> i32 {
	let x = 42;
	// rust的三元表达式
	let x = if x < 42 { -1 } else { 1 };
	println!("from if: {}", v);

	let food = "hamburger";
	let result = match food {
		"hotdog" => "is hotdog",
		// 注意,当它只是一个返回表达式时,大括号是可选的
		_ => "is not hotdog",
	};
	println!("identifying food: {}", result);

	let v = {
		// 这个作用域块让我们得到一个不影响函数作用域的结果
		let a = 1;
		let b = 2;
		a + b
	};
	println!("from block: {}", v);

	// 最后从函数中返回值的惯用方法
	v + 4
}

fn main() {
	println!("from function: {}", example());
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值