• 【Rust】003-基础语法:流程控制


    Rust】003-基础语法:流程控制

    一、概述

    控制流是编程语言的一个重要概念。程序员通过控制流可以控制哪些代码要执行。在Rust中,最常见的两种控制流结构是if表达式和循环。

    二、if 表达式

    1、语法格式

    这里的 condition 必须是 bool 类型

    if condition {
        // code to execute if the condition is true
    } else {
        // code to execute if the condition is false
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2、多个

    if condition1 {
        // code to execute if condition1 is true
    } else if condition2 {
        // code to execute if condition1 is false and condition2 is true
    } else {
        // code to execute if both conditions are false
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    3、获取表达式的值

    正如这一小节的标题所说,if其实是一个表达式,具有返回值。

    需要注意的是,if分支和else分支的返回值必须是同一类型

    fn main() {
        let temperature = 20;
    
        let weather = if temperature >= 25 {
            "hot"
        } else {
            "cool"
        };
    
        println!("The weather today is {}.", weather);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    三、循环

    Rust中提供了三种循环方式,loopwhilefor

    1、loop:无限循环,可跳出

    无限循环

    loop关键字会创建一个无限循环

    loop {
        // code to execute repeatedly
    }
    
    • 1
    • 2
    • 3

    跳出循环

    想要从循环中跳出,需要配合break关键词使用,下面的代码也展示了 continue 的用法!

    let mut counter = 0;
    
    loop {
        counter += 1;
        if counter < 5 {
            continue;
        }
        println!("Hello, world!");
        if counter >= 5 {
            break;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    返回值

    fn main() {
        let target = 10;
        let mut sum = 0;
        let mut counter = 1;
    
        let result = loop {
            sum += counter;
    
            if sum >= target {
                break counter; // The value of counter will be returned from the loop as a result
            }
    
            counter += 1;
        };
    
        println!("The first number whose sum of all previous numbers is greater than or equal to {} is {}.", target, result);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    2、while:条件循环,可跳出

    while condition {
        // code to execute while the condition is true
    }
    
    • 1
    • 2
    • 3

    3、for:常用于访问集合

    访问集合:while 示例

    fn main() {
        let numbers = [1, 2, 3, 4, 5];
        let mut index = 0;
    
        while index < numbers.len() {
            println!("The value is: {}", numbers[index]);
            index += 1;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    访问集合:for 示例

    fn main() {
        let numbers = [1, 2, 3, 4, 5];
    
        for number in numbers {
            println!("The value is: {}", number);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    对一个 range 进行循环

    这里的1..=3表示[1,3]这个区间的整数。如果是左闭右开,要写成1..3

    fn main() {
        for x in 1..=3 {
            println!("x: {}", x);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    4、labels:给循环加标签

    三种循环都支持!

    当循环存在嵌套关系时,breakcontinue只会对最内层的循环生效。但是有时候我们希望可以对外层的循环做break或者continue,这时该怎么办?幸运的是,Rust 可以给循环加上标签,从而breakcontinue都可以直接操作标签。

    fn main() {
        let x = 1;
    
        'outer: loop {
            let mut y = 1;
    
            'inner: loop {
                if y == 3 {
                    y += 1;
                    continue 'inner; // Skips to the next iteration of the 'inner loop
                }
    
                println!("x: {}, y: {}", x, y);
    
                y += 1;
    
                if y > 5 {
                    break 'outer; // Breaks out of the 'inner loop
                }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    带返回值

    fn main() {
        let x = 1;
    
        let z = 'outer: loop {
            let mut y = 1;
    
            'inner: loop {
                if y == 3 {
                    y += 1;
                    continue 'inner; // Skips to the next iteration of the 'inner loop
                }
    
                println!("x: {}, y: {}", x, y);
    
                y += 1;
    
                if y > 5 {
                    break 'outer y; // Breaks out of the 'inner loop
                }
            }
        };
        println!("z: {}", z);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
  • 相关阅读:
    react createElement 和 cloneElement 有什么区别?
    漏洞发展趋势
    Unix Network Programming Episode 58
    亚马逊刷关键词软件——亚马逊鲲鹏系统
    深入了解HarmonyOS(鸿蒙操作系统)
    设计模式-外观模式(Facade)
    hashCode()或HashCode的作用是什么?
    C++二级题目6
    Array.from()的使用方法(数组去重,伪数组转为数组,数组浅克隆),Set和Map数据结构
    java: java.lang.OutOfMemoryError: Java heap space报错解决办法
  • 原文地址:https://blog.csdn.net/qq_29689343/article/details/132642474