准备搜索...
分类筛选
全部分类

输入关键词开始搜索

14、Rust 条件判断

编程语言是模拟现实生活的,如果你有哪块搞不清楚,那么只要从现实生活中找例子即可。

我们的生活,大部分都是流水线似的,比如

睡醒 -> 早餐 -> 上班/上学 -> 午餐 -> 上班/上学 -> 回家 -> 晚饭 -> 睡觉

虽然站在每天的角度考虑,生活真的是顺风顺水,流水作业,但是,精确到每件事,就会有很多小插曲

比如

睡醒 -> (如果天还没亮则继续睡,否则起床吃早餐)

比如

如果是周六或周日,就不用上班或上课

也就是说,具体到每件事,都是根据一个条件作出判断,如果条件为真则怎么样,如果条件为假又怎么样,等等。

因为编程语言也是模拟生活的,所以,编程语言一般情况下,从入口代码开始,一条一条往下执行,比如

fn main()
{
    let name = "小明";        // 名字
    let firstMeet = false;   // 是否第一次见
    println!("{},你好!",name);
    println!("很高兴见到你");
    println!("我是DDKK.COM 弟弟快看,程序员编程资料站");
    println!("你叫什么名字");
}

上面这段代码,会从上往下一行一行的执行。所以输出的结果就是

你好!
很高兴见到你
我是DDKK.COM 弟弟快看,程序员编程资料站
你叫什么名字

但有时候,我们会想: 如果是第一次见则输出问候语,如果不是第一次见,则直接输出名字即可

对于这种现实生活中常见的需求,我们在程序中有要怎么模拟呢 ?

编程语言中的条件判断

我们说过编程语言也是模拟现实生活,针对上面提到的 如果...就... 或者 如果...就...否则就... 选择判断,我们称之为 条件判断

也就是说,条件判断就是

如果 ....  就 ...

或者

如果 ....  就 ... 否则 ....

或者

如果 .... 就 .... 否则如果 ... 就 ... 否则如果 ... 就 .... 否则 ....

绝大多数的编程语言都有着相同的条件判断语句,它们都是针对一个条件的真或假作出不同的选择,基本的流程图如下

 

条件判断语句 说明
if 语句 if 语句用于模拟现实生活中的 如果...就...
if...else 语句 if...else 语句用于模拟 如果...就...否则...
else...if 和嵌套if 语句 嵌套if 语句用于模拟 如果...就...如果...就...
match 语句 match 语句用于模拟现实生活中的 老师点名 或 银行叫号

if 语句

我们经常会说 如果肚子饿了就吃饭,如果今天天晴,我们就去郊游,如果....。

我们把这种 如果...就 语句叫做 条件语句,其中 肚子饿了、天晴 等叫做 条件,而 吃饭、郊游 叫做条件为真时要执行的 动作。

Rust 语言中使用 if 语句来模拟现实生活中这种 如果...就 的情况。

if 语句语法

if boolean_expression {
    // boolean_expression 为 true 时要执行的语句
    // statement(s) 
}

因此,if 语句简单来说,就是

1、如果boolean_expression为true,则执行大括号里的statement(s);
2、如果boolean_expression为false,则执行大括号后面的第一条语句;

把 如果肚子饿了就吃饭 格式化为 if 语句就是

if 肚子饿了 {
   吃饭
}

范例

我们写一个范例,使用 if 语句来模拟 如果数字大于 0 则输出 正数。

fn main(){
   let num:i32 = 5;
   if num > 0 {
      println!("正数");
   }
}

编译运行以上 Rust 代码,输出结果如下

正数

if else 语句

生活既有着流水线式的日复一日,也有着只有一个选择题的 如果。 然而只有一个选择题的 如果 真的只有一个选择吗?

不是的,不是还有另一个选择,就是什么都不做吗?

如果另一个选择是做些什么,那么,不就变成了

如果 ... 就 ... 否则就...

编程语言的创建者早就想到了这种二选一的情况,特意为 if 语句后面跟着一个可选的 else 语句。

这种二选一的 if 语句,我们称之为 if else 语句。

if..else 语句语法格式

if boolean_expression {
   // 如果 boolean_expression 为真则执行这里的代码
} else {
   // 如果 boolean_expression 为假则执行这里的代码
}

if..else 语句流程图

 

1、 在ifelse语句中,if语句才是最主要的如果条件为真,就没else语句啥事了;
2、 其实if语句后面的else语句是可选的就像我们所说的,如果条件为假就什么都不做,那要else语句有什么用呢?;

else 语句的唯一作用,就是 if 语句中的 条件 为假时做些什么,执行些什么

范例

我们写一段代码,使用 if else 语句来判断一个数是否偶数或奇数,如果是偶数则输出 偶数 如果是奇数则输出 奇数

fn main() {
   let num = 12;
   if num % 2==0 {
      println!("偶数");
   } else {
      println!("奇数");
   }
}

编译运行以上 Rust 代码,输出结果如下

偶数

嵌套 If 语句

现实生活中肯定不会只有 如果...不然就 这种二选一的情况,还存在多个 如果 的情况。

比如 如果今天天晴,我们就去郊游,如果下雪,我们就堆雪人,如果下雨,我们就逛商场,如果下暴雨,我们就在家看电视。

面对多个 如果 这种情况,我们可以使用 嵌套 if 语句。

嵌套 if 语句用于测试多种条件。

语法

嵌套If 语句的语法格式如下

if boolean_expression1 {
   // 当 boolean_expression1 为 true 时要执行的语句
} else if boolean_expression2 {
   // 当 boolean_expression2 为 true 时要执行的语句
} else {
   // 如果 boolean_expression1 和 boolean_expression2 都为 false 时要执行的语句
}

是不是看起来有点复杂了。

使用嵌套 if 语句,也就是 if...else if... 语句时需要牢记几个点:

  • 任何一个 if 或者嵌套 if 语句可以有 0 个或 1 个 else 语句,但 else 语句必须出现在 if else 后面,也就是出现在最后。
  • 任何一个 if 或者嵌套 if 语句可以有 0 个或多个 if else 语句,但所有的 if else 语句都必须出现在 else 语句之前。
  • 一旦某个 else if 中的条件 boolean_expression1 返回 true,那么后面的 else if 和 else 语句都不会运行。

范例

我们使用嵌套 if 语句来写一段代码,判断某个值是 大于、小于、等于 0。

fn main() {
   let num = 2 ;
   if num > 0 {
      println!("{} is positive",num);
   } else if num < 0 {
      println!("{} is negative",num);
   } else {
      println!("{} is neither positive nor negative",num) ;
   }
}

编译运行以上 Rust 代码,输出结果如下

2 is positive

match 语句

match 语句用于检查 某个当前的值 是否匹配 一组/列值 中的某一个。

如果放到现实生活中,那么 match 语句类似于 老师点名 或者 银行叫号。当老师叫一个名字,比如 小明 时,叫 小明 的那个人就会应答,比如说 到。

如果你会 C 语言,那么 Rust 中的 match 表达式则类似于 C 语言中的 switch 语句。

对match 语句有了个大概的印象之后,我们来看看 Rust 中的 switch 语句的语法格式

match 语句语法格式

Rust 中一个基本的 match 语句语法格式如下

match variable_expression {
   constant_expr1 => {
      // 语句;
   },
   constant_expr2 => {
      // 语句;
   },
   _ => {
      // 默认
      // 其它语句
   }
};

match 语句有返回值,它把 匹配值 后执行的最后一条语句的结果当作返回值。

let expressionResult = match variable_expression {
   constant_expr1 => {
      // 语句;
   },
   constant_expr2 => {
      // 语句;
   },
   _ => {
      // 默认
      // 其它语句
   }
};

我们来分析下上面这两个 match 语句的语法:

1、 首先要说明的是match关键字后面的表达式不必括在括号中也就是variable_expression不需要用一对括号(())括起来;
2、 其次,match语句在执行的时候,会计算variable_expression表达式的值,然后把计算后的结果和每一个constant_exprN匹配,使用的是
全等于
也就是===来匹配如果匹配成功则执行=>`{}里面的语句;
3、 如果variable_expression表达式的值没有和任何一个constant_exprN匹配,那么它会默认匹配_;

因此,当没有匹配时,默认会执行 _ =>` {} 中的语句。

4、 match语句有返回值,它把匹配值后执行的最后一条语句的结果当作返回值;
5、 _=>{}语句是可选的,也就是说match语句可以没有它; **6、** 如果只有一条语句,那么每个constant_expr2=>{}中的{}是可以省略的;

范例

看起来match 语句有点复杂,我们直接拿几个范例来说明下

fn main(){
   let state_code = "MH";
   let state = match state_code {
      "MH" => {println!("Found match for MH"); "Maharashtra"},
      "KL" => "Kerala",
      "KA" => "Karnadaka",
      "GA" => "Goa",
      _ => "Unknown"
   };
   println!("State name is {}",state);
}

编译运行以上 Rust 代码,输出结果如下

Found match for MH
State name is Maharashtra

上面的范例中,state_code 对应着语法中的 variable_expression,MH、KL、KA、GA 对应这语法中的 constant_expr1 、constant_expr2 等等。

因为我们的 variable_expression 的值为 MH 和值为 MH 的第一个 constant_expr1 匹配,因此会执行 {println!("Found match for MH"); "Maharashtra"}。 然后将执行的最后一条语句的结果,也就是 "Maharashtra" 作为整个表达式的值返回。

这样,我们的 state 变量就被赋值为 Maharashtra。

范例 2

上面这个范例是匹配的情况,如果不匹配,那么就会执行 _ =>` 语句

fn main(){
   let state_code = "MS";
   let state = match state_code {
      "MH" => {println!("Found match for MH"); "Maharashtra"},
      "KL" => "Kerala",
      "KA" => "Karnadaka",
      "GA" => "Goa",
      _ => "Unknown"
   };
   println!("State name is {}",state);
}

编译运行以上 Rust 代码,输出结果如下

Unknown
State name is Unknown