ข้ามไปยังเนื้อหา

Control Flow

ใน Rust if คือ expression — ประเมินออกมาเป็นค่า คุณจึงใช้ if ทางขวามือของ let binding ได้ ทุก branch ต้องผลิตค่าที่มี type เดียวกัน

fn main() {
let score = 75;
let grade = if score >= 90 { "A" } else if score >= 75 { "B" } else { "C" };
println!("grade = {}", grade);
}

ไม่จำเป็นต้องมี parentheses รอบ condition และต้องมี curly brace รอบ body เสมอ

เมื่อไม่ต้องการผลลัพธ์ ใช้ if แบบ statement:

fn main() {
let n = 7;
if n % 2 == 0 {
println!("even");
} else {
println!("odd");
}
}

loop รัน body ของตัวเองไม่หยุดจนกว่าจะพบ break อย่างชัดเจน ต่างจากภาษาอื่น loop ของ Rust สามารถ return ค่า ผ่าน break ได้

fn main() {
let mut counter = 0;
let result = loop {
counter += 1;
if counter == 5 {
break counter * 2; // loop ประเมินเป็นค่านี้
}
};
println!("result = {}", result); // 10
}

while วนซ้ำตราบเท่าที่ condition เป็น true ไม่สามารถ return ค่าผ่าน break ได้

fn main() {
let mut n = 1;
while n < 4 {
print!("{} ", n);
n += 1;
}
println!(); // newline
}

for คือ loop ที่ใช้บ่อยที่สุดใน Rust และวนผ่าน type ใดก็ได้ที่ implement Iterator trait รวมถึง range และ array

fn main() {
// Exclusive range: 1, 2, 3
for i in 1..4 {
print!("{} ", i);
}
println!();
// Inclusive range: 1, 2, 3, 4, 5
for i in 1..=5 {
print!("{} ", i);
}
println!();
// วนผ่าน array
let fruits = ["apple", "banana", "cherry"];
for fruit in fruits {
print!("{} ", fruit);
}
println!();
}

ควรใช้ for แทน while ที่มี index manual เสมอเมื่อเป็นไปได้ เพราะปลอดภัยกว่าและแสดงเจตนาได้ชัดเจนกว่า

fn main() {
// if as an expression
let score = 75;
let grade = if score >= 90 { "A" } else if score >= 75 { "B" } else { "C" };
println!("grade = {}", grade);
// loop returning a value via break
let mut counter = 0;
let result = loop {
counter += 1;
if counter == 5 {
break counter * 2;
}
};
println!("loop result = {}", result);
// while loop
let mut n = 1;
while n < 4 {
print!("{} ", n);
n += 1;
}
println!();
// for with a range
for i in 1..=3 {
print!("{} ", i);
}
println!();
// for over an array
let nums = [10, 20, 30];
for val in nums {
print!("{} ", val);
}
println!();
}
สิ่งที่จำเป็นสำหรับการใช้ if ของ Rust เป็น expression ทางขวาของ let คืออะไร?
loop ใน Rust return ค่าอย่างไร?
ความแตกต่างระหว่าง 1..4 และ 1..=4 คืออะไร?
loop construct ใดที่ idiomatic ที่สุดใน Rust เมื่อวนผ่าน collection?