条件执行

let x = 5;
if x == 5 {
    println!("x is 5"); // done
}

if 表达式,相当于 JavaScript 的三元表达式:

let x_odd = if x % 2 == 0 { "odd" } else { "even" };
println!("x_odd is {}", x_odd); // x_odd is even

多个条件 (if/else if)

let x = 2;
let y = 5;
if x > y {
    println!("x is greater than  y");
} else if x < y {
    println!("x is less than y"); // done 
} else {
    println!("x is equal to y");
}

循环

使用 loop 循环

loop {
    if count == 10 {
        break;
    }
    count += 1;
    println!("count is {}", count);
}

loop 会循环执行某个语法快,直到使用 break 停止循环或是手动停止程序。 上述打印出:

count is 1
count is 2
count is 3
count is 4
count is 5
count is 6
count is 7
count is 8
count is 9
count is 10

从循环中返回某个值:

let result = loop {
    if count == 15 {
        // returning a value with break statement
        break count * 20;
    }
    count += 1;
    println!("count is {}", count); // 300
};

使用 while 循环

与 loop 循环不同的是,while 循环中 break 不能返回值。

let mut count = 0;
let letters: [char; 5] = ['a', 'b', 'c', 'd', 'e'];

while count < letters.len() {
    println!("letter [{}] is {}", count, letters[count]);
    count += 1;
}

结果:

letter[0] is a
letter[1] is b
letter[2] is c
letter[3] is d
letter[4] is e

for 循环

使用 iter() 方法返回一个迭代器。 迭代器对集合类元素实现迭代,使用 next() 方法返回下一个迭代。

for item in message.iter() {
    println!("current item is  {}", item);
}

使用 enumerate() 返回一个元组,包含当前迭代的元素的索引和引用。推荐对该元组进行解构。

for (index, &item) in message.iter().enumerate() {
    println!("item {} is {}", index, item);
    if item == 'e' {
        break;
    }
}

因为返回的元组中是元素的引用,使用 &item 可以借用变量而不取得所有权。在循环中可以访问该变量。

迭代一组数字:

for number in 0..5 {
    println!("number is {}", number); 
}
number is 0
number is 1
number is 2
number is 3
number is 4