Rust 控制流

条件语句

if 表达式

let a = 1;
let b = 2;
if a > b {
    println!("a is greater than b");
} else {
    println!("a is not greater than b");
}

多分枝语句

let a = 1;
let b = 2;
if a > b {
    println!("a is greater than b");
} else if a < b {
    println!("a is less than b");
} else {
    println!("a is equal to b");
}

三元表达式

  • 在rust 中,每一个大括号括起来就是一个 block ,而每一个 block 末尾的默认就是返回值,此时三元表达式可以这么写
let a = 1;
let b = 2;
let c = if a > b { a } else { b };

// 多层级潜逃
let d = if a > b {
    if c > d {
        c  // 等价于 return c;
    } else {
        d  // 等价于 return d;
    }
} else {
    if c > d {
        c  // 等价于 return c;
    } else {
        d  // 等价于 return d;
    }
};

循环语句

  • 首先这里需要注意的是既然涉及到了循环,那就说明我们的定义的循环的变量是一个可变的,而不是不可变的
  • 循环语句有三种:forwhileloop

while 循环语句

  • 基本的格式如下
let mut a = 1;  // 定义循环的变化体
while a < 10 {  // 循环的条件
    println!(a);
    a += 1;  // 循环的变化体
}
  • 我们也是可以主动的通过 continuebreak 实现对应的主动的控制循环语句的执行流程的呐
  • continue :跳过当前循环,继续下一次循环
  • break :跳出当前循环
fn main() {
    let mut i = 0;
    while i < 50 {
        i += 1;
        if i % 3 == 0 { continue; }
        if i % 5 == 0 { break; }
        println!(i);
    }
}

loop 无限循环

  • 在其他的大多数的编程语言中,如果想要实现无限循环的话,大多数的实现是: while expression expression 一直为 true 就行了
  • 当然在 rust 中也是可以通过这样的方式来实现无限循环的,但是此时编译器是会给出一个报错的,就是:建议使用 loop 来实现无限循环
fn main() {
    let mut i = 0;
    while true {
        i += 1;
        if i % 3 == 0 { continue; }
        if i % 5 == 0 { break; }
        println!(i);
    }
}
  • 我们也可以通过 loop 来实现无限循环
fn main() {
    let mut i = 0;
    loop {
        i += 1;
        if i % 3 == 0 { continue; }
        if i % 5 == 0 { break; }
        println!(i);
    }
}
  • 我们也可以通过 loop 来实现无限循环,并且通过 break 来跳出循环
fn main() {
    let mut i = 0;
    loop {
        i += 1;
        if i % 3 == 0 { continue; }
        if i % 5 == 0 { break; }
        println!(i);
    }
}

也就是说在 rust 中的 loop 无限循环等价于 while true 只是一个语言层面比较推荐的书写形式而已,最终想要实现的想过是一致的呐

for 循环语句

  • 基本的格式如下
  • 0..10 === [0, 10)
  • 在很多的语言中基本都是这样的规则,包括 pythonjavac++ 等,前包括后不包括的
for i in 0..10 {
    println!(i);
}
let mut limit = 10;
for i in 0..limit {
    println!(i);
    limit -= 1;
}
// 直接来一个向中间缩紧的循环
```rust
let mut limit = 10;
for i in (0..limit).rev() {
    println!(i);
    limit -= 1;
}
  • 注意在 nodejs rust golang 或者其他语言中,一个 {} 内包裹的部分是处于单独的作用域内的,所以说是不能直接通过变量的方式来进行访问的
  • 核心来说还是对应的作用域的一个互相排斥的问题吧,但是内层作用域是可以访问外层作用域的变量的