3.5 控制流

Rust中的控制流结构主要包括:

  • if条件判断;
  • loop循环;
  • while循环;
  • for .. in 循环。

3.5.1 if条件判断

  • if执行条件判断,示例如下:

    fn main() {
        let a = 2u32;
    
        if a > 5u32 {
            println!("a > 5");
        } else {
            println!("a <= 5");
        }
    }
    
  • if - else if处理多重条件,示例如下:

    fn main() {
        let a = 3u32;
    
        if a > 5u32 {
            println!("a > 5");
        } else if a > 4u32 {
            println!("a > 4");
        } else if a > 3u32 {
            println!("a > 3");
        } else if a > 2u32 {
            println!("a > 2");
        } else if a > 1u32 {
            println!("a > 1");
        } else {
            println!("a = 1");
        }
    }
    
  • let语句中使用if

    if是一个表达式,所以可以在let右侧使用,如下:

    fn main() {
        let a = 3u32;
    
        let a_bigger_than_two: bool = if a > 2u32 {
            true
        } else {
            false
        };
    
        if a_bigger_than_two {
            println!("a > 2");
        } else {
            println!("a <= 2");
        }
    }
    

3.5.2 loop循环

  • loop重复执行代码

    fn main() {
        // 一直循环打印 again!
        loop {
            println!("again!");
        }
    }
    
  • 使用break终止循环

    fn main() {
        let mut counter = 0;
    
        loop {
            println!("counter = {:?}", counter);
            counter += 1;
    
            if counter == 10 {
                break; // 将终止循环
            }
        }
    }
    

    上面的代码将打印10次,遇到break后终止循环。另外,break也可以返回值,如下:

    fn main() {
        let mut counter = 0;
    
        let result = loop {
            counter += 1;
    
            if counter == 10 {
                break counter * 2;
            }
        };
    
        println!("The result is {result}");
    }
    
  • 使用continue可以直接跳到下一轮循环

    fn main() {
        let mut x = 0;
        // 此循环将只打印10以内的奇数
        loop {
            x += 1;
            if x == 10 {
                break;
            }
            if x % 2 == 0 {
                continue; // 将直接跳到下一轮循环
            }
            println!("{}", x);
        }
    }
    

3.5.3 while条件循环

  • while条件循环执行代码,当条件不满足时结束循环,如下:

    fn main() {
        let mut cnt = 0u32;
        while cnt < 10 {
            println!("cnt = {:?}", cnt);
            cnt += 1;
        }
    }
    
  • while循环中也可以使用breakcontinue,如下:

    fn main() {
        let mut x = 0;
    
        while x < 10 {
            x += 1;
            println!("{}", x);
            if x % 2 == 0 {
                continue; // 跳到下一轮循环
            }
            if x > 8 {
                break; // 提前结束
            }
        }
    }
    

3.5.4 for .. in 循环

for循环用来对一个集合的每个元素执行一些代码,使用方式如下:

fn main() {
    let a = [10, 20, 30, 40, 50];

    for item in a {
        println!("the value is: {:?}", item);
    }
}