3、流程控制语句
if和else
if语句
if关键字后面跟着一个代码块,只有当if后面的条件表达式的值为true的时候,代码块才会执行
if <条件表达式> {
//代码块
}
else语句
else语句可以跟在if语句后面,当if后面的条件表达式的值为false的时候,代码块才会执行
let number=3;
if number<5{
println!("number is smaller than 5");
}
else{
println!("number is greater than 5");
}
其实这些都是很常规的东西,我这里只是简单过一下(
这里要注意的其实就是简单的格式问题,在C/C++中,条件表达式是要加括号的
if(number<5){
std::cout<<"number is smaller than 5"<<std::endl;
}
rust中不加括号,这一点要注意下,别的就没什么了
else if语句
多个流程控制可以使用else if语句
比如
let num=5;
if num<5{
println!("num is smaller than 5");
}
else if num>=3{
println!("num is greater than 3");
}
else{
println!("num is smaller than 3");
}
Booleans 布尔类型
条件表达式的类型,必须是bool类型,在rust语言中,这一点更加明显,rust对类型的要求极其严格,所以一般的表达式,不是bool类型就不是bool类型,根本不存在隐式的布尔类型转换
在C/C++中,可以这样编码
TreeNode *head=new TreeNode();
...
if(head){
...
}
这段代码,其实就是说,如果head为空指针的话,那么if语句会把 nullptr 这个值视为 false ,或者 if(num){} 这种也是可以的,只要num不是0,那就是true
但是rust不能这样玩,前面也提到过,如果这样做的话,编译会出错
条件运算符
这里和其他语言也差不多
== 等于
!= 不等于
< 小于
> 大于
<= 小于等于
>= 大于等于
……
if/else 是一个表达式
这一点算是挺有意思的设计,我查了一下资料,这个理念是借鉴的函数式编程设计简单来讲就是可以这样编码
let number=3;
let message=if number<5{
"smaller than 5"
}else{
"greater than 5"
};
这个设计我觉得非常棒,如果是在C/C++中,那么想实现这样的功能,代码会比较冗余,你还可以把代码集成到各种函数的参数里面,完全可以当作一个表达式来用!
不过有一点要注意
if/else作为表达式时一定要有else代码块
查资料的时候看到了,if/else作为表达式时一定要有else代码块
这是rust的设计理念
防止代码逻辑没有处理到全部的情况,有else语句,能确保不管条件表达式如何变化,这个if/else表达式一定能命中一条分支执行,如果没有的话,那么可能无法执行,返回一个(),这样会导致一些难以处理的bug
所以一定要有else代码块,else if有没有则无所谓
图上的help也说明了,考虑添加else代码块,以处理预期以外的事件,毕竟假如num<3的话,n就没有值了,那就糟糕了
改成这样就OK了
练习
也是很顺利地通过了
今天的这一节的笔记就先到这了,下一节再见,
ヾ( ̄▽ ̄)ByeBye