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

有意思的基础知识

Control Flows


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

条件控制 if-else if -else:

  1. / 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 :

  1. 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:

  1. 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

  1. 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

  1. 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
  2. [易学易懂系列|rustlang语言|零基础|快速入门|(9)|Control Flows流程控制]的更多相关文章

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

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

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

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

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

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

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

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

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

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

    1.  
    2. 随机推荐

        1. chrome浏览器爬虫WebDriverException解决采用python + selenium + chrome + headless模式
        1. WebDriverException: Message: unknown error: Chrome failed to start: crashed 第一种:如果出现下面情况: chrome浏览器有 ...

        1. Go语言程序结构
        1. 注意:Go语言源码文件编码格式必须是 UTF-8 格式,否则会导致编译器出错. 1.语言变量 a) 指定变量类型,声明后若不赋值,使用默认值. var name string b) 根据值自行判定变量 ...

        1. Windows监控——性能指标详解(转)
        1. http://blog.csdn.net/yiqin3399/article/details/51730106

        1. java里poi操作excel的工具类(兼容各版本)
        1. 转: java里poi操作excel的工具类(兼容各版本) 下面是文件内具体内容,文件下载: import java.io.FileNotFoundException; import java.io. ...

        1. VueLoaderPlugin作用
        1. 在webpack配置里加入new VueLoaderPlugin, 在plugin里打断点 然后debug: 在这个地方: 可以发现,在webpack初始化的阶段..webpack.js刚开始执行的时 ...

        1. frei0r-20190715-118a589 编译 frei0r 时注意事项
        1. 如果滤镜是 CPP 编写,需要选择 gcc Thread model: win32 模式,如果选择 posix 模式时,提示错误: 无法找到 dll 文件: frei0r-1.6.1-dlls-201 ...

        1. 自动部署脚本-bash
        1. from here !/bin/bash Check if user is root if [ $(id -u) != "0" ]; then Echo_Red "Err ...

        1. Anko
        1. 先mark一下. https://www.jianshu.com/p/4a3ca2c315f2

        1. IDEA github 上传项目, 拉取, 删除
        1. 1.IDEA登录github账号 settings -> Version Controller -> GitHub 用户名密码登录 或token登录都可以 2.VCS -> impo ...

        1. 10大IT社区
        1. 技术社区导航 http://tooool.org/ 1. cnblogs 人多内容质量最高 2.csdn csdn的注册人数多,但新手多 3.java eye java eye注册用户刚突破10万,但 ...