[易学易懂系列|rustlang语言|零基础|快速入门|(9)]

有意思的基础知识

Control Flows


我们今天再来看看流程控制。

条件控制 if-else if -else:

/ Simplest Example
let team_size = 7;
if team_size < 5 {
   println!("Small");
} else if team_size < 10 {
   println!("Medium");
} else {
   println!("Large");
}

// partially refactored code
let team_size = 7;
let team_size_in_text;
if team_size < 5 {
   team_size_in_text = "Small";
} else if team_size < 10 {
   team_size_in_text = "Medium";
} else {
   team_size_in_text = "Large";
}
println!("Current team size : {}", team_size_in_text);

//optimistic code
let team_size = 7;
let team_size_in_text = if team_size < 5 {
   "Small" //⭐️no ;
} else if team_size < 10 {
   "Medium"
} else {
   "Large"
};
println!("Current team size : {}", team_size_in_text);


let is_below_eighteen = if team_size < 18 { true } else { false };

模式匹配 match :

let tshirt_width = 20;
let tshirt_size = match tshirt_width {
   16 => "S", // check 16
   17 | 18 => "M", // check 17 and 18
   19 ... 21 => "L", // check from 19 to 21 (19,20,21)
   22 => "XL",
   _ => "Not Available",
};
println!("{}", tshirt_size); // L


let is_allowed = false;
let list_type = match is_allowed {
   true => "Full",
   false => "Restricted"
   // no default/ _ condition can be skipped
   // Because data type of is_allowed is boolean and all possibilities checked on conditions
};
println!("{}", list_type); // Restricted


let marks_paper_a: u8 = 25;
let marks_paper_b: u8 = 30;
let output = match (marks_paper_a, marks_paper_b) {
  (50, 50) => "Full marks for both papers",
  (50, _) => "Full marks for paper A",
  (_, 50) => "Full marks for paper B",
  (x, y) if x > 25 && y > 25 => "Good",
  (_, _) => "Work hard"
};
println!("{}", output); // Work hard

while:

let mut a = 1;
while a <= 10 {
   println!("Current value : {}", a);
   a += 1; //no ++ or -- on Rust
}

// Usage of break and continue
let mut b = 0;
while b < 5 {
   if b == 0 {
       println!("Skip value : {}", b);
       b += 1;
       continue;
  } else if b == 2 {
       println!("Break At : {}", b);
       break;
  }
   println!("Current value : {}", b);
   b += 1;
}

// Outer break
let mut c1 = 1;
'outer_while: while c1 < 6 { //set label outer_while
   let mut c2 = 1;
  'inner_while: while c2 < 6 {
       println!("Current Value : [{}][{}]", c1, c2);
       if c1 == 2 && c2 == 2 { break 'outer_while; } //kill outer_while
       c2 += 1;
  }
   c1 += 1;
}

loop

loop {
   println!("Loop forever!");
}

// Usage of break and continue
let mut a = 0;
loop {
   if a == 0 {
       println!("Skip Value : {}", a);
       a += 1;
       continue;
  } else if a == 2 {
       println!("Break At : {}", a);
       break;
  }
   println!("Current Value : {}", a);
   a += 1;
}

// Outer break
let mut b1 = 1;
'outer_loop: loop { //set label outer_loop
 let mut b2 = 1;
'inner_loop: loop {
   println!("Current Value : [{}][{}]", b1, b2);
   if b1 == 2 && b2 == 2 {
       break 'outer_loop; // kill outer_loop
  } else if b2 == 5 {
       break;
  }
   b2 += 1;
}
 b1 += 1;
}

for

for a in 0..10 { //(a = o; a <10; a++) // 0 to 10(exclusive)
 println!("Current value : {}", a);
}

// Usage of break and continue
for b in 0..6 {
 if b == 0 {
   println!("Skip Value : {}", b);
   continue;
} else if b == 2 {
   println!("Break At : {}", b);
   break;
}
 println!("Current value : {}", b);
}

// Outer break
'outer_for: for c1 in 1..6 { //set label outer_for
'inner_for: for c2 in 1..6 {
   println!("Current Value : [{}][{}]", c1, c2);
   if c1 == 2 && c2 == 2 { break 'outer_for; } //kill outer_for
}
}


// Working with arrays/vectors
let group : [&str; 4] = ["Mark", "Larry", "Bill", "Steve"];

for n in 0..group.len() { //group.len() = 4 -> 0..4

[易学易懂系列|rustlang语言|零基础|快速入门|(9)|Control Flows流程控制]的更多相关文章

  1. [易学易懂系列|rustlang语言|零基础|快速入门|系列文章]

    简单易懂的rustlang入门教程. [易学易懂系列|rustlang语言|零基础|快速入门|(1)|开篇] [易学易懂系列|rustlang语言|零基础|快速入门|(2)|VCCode配置] [易学 ...

  2. [易学易懂系列|rustlang语言|零基础|快速入门|(28)|实战5:实现BTC价格转换工具]

    [易学易懂系列|rustlang语言|零基础|快速入门|(28)|实战5:实现BTC价格转换工具] 项目实战 实战5:实现BTC价格转换工具 今天我们来开发一个简单的BTC实时价格转换工具. 我们首先 ...

  3. [易学易懂系列|rustlang语言|零基础|快速入门|(27)|实战4:从零实现BTC区块链]

    [易学易懂系列|rustlang语言|零基础|快速入门|(27)|实战4:从零实现BTC区块链] 项目实战 实战4:从零实现BTC区块链 我们今天来开发我们的BTC区块链系统. 简单来说,从数据结构的 ...

  4. [易学易懂系列|rustlang语言|零基础|快速入门|(26)|实战3:Http服务器(多线程版本)]

    [易学易懂系列|rustlang语言|零基础|快速入门|(26)|实战3:Http服务器(多线程版本)] 项目实战 实战3:Http服务器 我们今天来进一步开发我们的Http服务器,用多线程实现. 我 ...

  5. [易学易懂系列|rustlang语言|零基础|快速入门|(25)|实战2:命令行工具minigrep(2)]

    [易学易懂系列|rustlang语言|零基础|快速入门|(25)|实战2:命令行工具minigrep(2)] 项目实战 实战2:命令行工具minigrep 我们继续开发我们的minigrep. 我们现 ...

  6. [易学易懂系列|rustlang语言|零基础|快速入门|(24)|实战2:命令行工具minigrep(1)]

    [易学易懂系列|rustlang语言|零基础|快速入门|(24)|实战2:命令行工具minigrep(1)] 项目实战 实战2:命令行工具minigrep 有了昨天的基础,我们今天来开始另一个稍微有点 ...

  7. [易学易懂系列|rustlang语言|零基础|快速入门|(23)|实战1:猜数字游戏]

    [易学易懂系列|rustlang语言|零基础|快速入门|(23)|实战1:猜数字游戏] 项目实战 实战1:猜数字游戏 我们今天来来开始简单的项目实战. 第一个简单项目是猜数字游戏. 简单来说,系统给了 ...

  8. [易学易懂系列|rustlang语言|零基础|快速入门|(5)|生命周期Lifetime]

    [易学易懂系列|rustlang语言|零基础|快速入门|(5)] Lifetimes 我们继续谈谈生命周期(lifttime),我们还是拿代码来说话: fn main() { let mut a = ...

  9. [易学易懂系列|rustlang语言|零基础|快速入门|(22)|宏Macro]

    [易学易懂系列|rustlang语言|零基础|快速入门|(22)|宏Macro] 实用知识 宏Macro 我们今天来讲讲Rust中强大的宏Macro. Rust的宏macro是实现元编程的强大工具. ...

  10. [易学易懂系列|rustlang语言|零基础|快速入门|(21)|智能指针]

    [易学易懂系列|rustlang语言|零基础|快速入门|(21)|智能指针] 实用知识 智能指针 我们今天来讲讲Rust中的智能指针. 什么是指针? 在Rust,指针(普通指针),就是保存内存地址的值 ...

随机推荐

  1. Jmeter(十二)响应断言之响应文本和响应信息的差别

    在Jmeter的后置处理器中添加响应断言, 要测试的响应字段中有两个很难区分的选项, 响应文本和响应信息. 我做了两个小实验来进行区别. 1. 用Fiddler捕捉了一个POST请求, 其响应是suc ...

  2. LoadRunner 技巧之 自动关联

    LoadRunner 技巧之 自动关联 这一节讲loadunner 关联的问题,其实这个东西理解起来简单,但说起来比较麻烦. 关联的原理:                               ...

  3. springboot--websocket简单demo(一):session chat

    最近跟着大佬 https://tycoding.cn/2019/06/16/project/boot-chat/ 敲了2个关于websocket的demo,总结一下 从将会话信息保存在session中 ...

  4. Ubuntu系统挂载磁盘硬盘

    在电脑(Ubuntu16.04)新装了一个硬盘,然后只有挂载了我们才能正常使用,下面总结一下挂载的过程. 首先,打开命令行输入命令: sudo fdisk -l 可以看到:磁盘格式化后 硬盘格式化 命 ...

  5. 20191209 Linux就该这么学(6)

    6. 存储结构与磁盘划分 6.1 一切从"/"开始 Linux 系统中的一切文件都是从"根(/)"目录开始的,并按照文件系统层次化标准(FHS)采用树形结构来存 ...

  6. Vmware ESXI 安装Windows

    Vmware ESXI 安装Windows >ESXi专为运行虚拟机.最大限度降低配置要求和简化部署而设计.只需几分钟时间,客户便可完成从安装到运行虚拟机的全过程,特别是在下载并安装预配置虚拟设 ...

  7. jquery validate 自定义校验方法

    1.引入JS jquery.min.js jquery.validate.min.js messages_zh.min.js 2.添加验证方法,第一个参数为验证方法的名称,第二个参数为验证方法. $. ...

  8. 實現QQ第三方登錄

    <?php // 写几个函数,分别用于获取code,token,openid,用户信息 // 跳转到QQ授权登录页面 function code(){ $response_type='code' ...

  9. 非关系型数据库MongoDB初级使用教程

    安装:官网 安装难度不大,依序即可 1.新建存储文件    完成后,打开MongoDBx下载路径,新建名为data的文件夹,在此新建名为db的文件夹,db文件夹即用于存储数据 2.配置文件    在b ...

  10. vue中如何去掉空格

    一.问题 vue中当用户提交表单时,有的数据需要去掉前后空格然后再向后端发送. 二.解决方法 首先可以使用v-model.trim这个v-model修饰符去解决它,但是当用户输入\u200B时,这个方 ...