If...else trong Rust
if cho phép chương trình của bạn đưa ra quyết định — chạy khối code này hay khối code kia, tùy vào một điều kiện.
if cơ bản
Phần tiêu đề “if cơ bản”fn main() { let age = 20;
if age >= 18 { println!("Bạn được đi bầu cử"); }}Có vài điều cần để ý, vì chúng hay làm người đến từ ngôn ngữ khác vấp phải:
- Không cần dấu ngoặc quanh điều kiện — viết
if age >= 18, không phảiif (age >= 18). - Điều kiện phải là một
boolthật sự.if age(một con số) sẽ không biên dịch được — bạn cầnif age != 0hoặc tương tự.
if / else
Phần tiêu đề “if / else”fn main() { let age = 15;
if age >= 18 { println!("Bạn được đi bầu cử"); } else { println!("Bạn chưa đủ tuổi"); }}else if cho nhiều nhánh hơn
Phần tiêu đề “else if cho nhiều nhánh hơn”fn main() { let score = 72;
if score >= 90 { println!("Xếp loại: A"); } else if score >= 75 { println!("Xếp loại: B"); } else if score >= 60 { println!("Xếp loại: C"); } else { println!("Xếp loại: F"); }}Rust kiểm tra từng điều kiện từ trên xuống dưới và chạy nhánh đầu tiên khớp, đúng như bạn nghĩ.
Dùng if như một biểu thức
Phần tiêu đề “Dùng if như một biểu thức”Đây là điều Rust làm được mà nhiều ngôn ngữ không làm được: if có thể tạo ra một giá trị. Nghĩa là bạn có thể dùng nó ở vế phải của một let:
fn main() { let age = 20; let status = if age >= 18 { "người lớn" } else { "trẻ vị thành niên" };
println!("{status}");}Cách này hoạt động giống như việc trả về giá trị từ một hàm — không có dấu chấm phẩy sau giá trị ở mỗi nhánh. Yêu cầu duy nhất: cả hai nhánh phải tạo ra cùng một kiểu (ở đây cả hai đều là &str).
Kết hợp điều kiện thay vì lồng nhau
Phần tiêu đề “Kết hợp điều kiện thay vì lồng nhau”Bạn có thể đặt một if bên trong một if khác. Cách đó chạy được, nhưng lồng hai ba tầng thì sẽ khó đọc. Thường thì bạn có thể nối các điều kiện bằng toán tử logic && (và) và || (hoặc):
fn main() { let temperature = 22; let is_raining = false;
// Lồng nhau: chạy được, nhưng code cứ trôi dần sang phải if temperature > 15 { if !is_raining { println!("Lồng nhau: đi dạo thôi"); } }
// Cùng phép kiểm tra đó, viết thành một điều kiện if temperature > 15 && !is_raining { println!("Kết hợp: đi dạo thôi"); }
// || đúng nếu một trong hai vế đúng if temperature < 0 || temperature > 35 { println!("Ở trong nhà thôi"); } else { println!("Thời tiết ổn"); }}Kết quả:
Lồng nhau: đi dạo thôiKết hợp: đi dạo thôiThời tiết ổnLồng nhau vẫn hợp lý khi khối bên trong làm thêm việc gì đó, hoặc khi nó có else riêng. Nhưng khi if bên ngoài chỉ có mỗi nhiệm vụ canh gác cho if bên trong, thì && nói cùng một điều mà đơn giản hơn. Để kiểm tra một số có nằm trong một khoảng hay không, hãy viết temperature >= 15 && temperature <= 25. Rust không cho phép 15 <= temperature <= 25.
Luyện tập
Phần tiêu đề “Luyện tập”1. Chẵn hay lẻ
Phần tiêu đề “1. Chẵn hay lẻ”Lưu một số n = 7. Dùng if như một biểu thức để gán cho biến kind giá trị "chẵn" hoặc "lẻ", rồi in ra 7 là số lẻ. Gợi ý: một số là số chẵn khi n % 2 == 0.
Xem lời giải
fn main() { let n = 7; let kind = if n % 2 == 0 { "chẵn" } else { "lẻ" }; println!("{n} là số {kind}");}Kết quả:
7 là số lẻ2. Giá vé
Phần tiêu đề “2. Giá vé”Một rạp chiếu phim lấy 5 đô cho trẻ em dưới 12 tuổi, 7 đô cho người từ 65 tuổi trở lên, và 12 đô cho mọi người còn lại. Lưu age là 70, tính price bằng một biểu thức if / else if / else, rồi in ra Vé: $7. Gợi ý: nhánh nào cũng phải trả lại một con số, và cả khối if kết thúc bằng dấu chấm phẩy sau dấu } cuối cùng.
Xem lời giải
fn main() { let age = 70;
let price = if age < 12 { 5 } else if age >= 65 { 7 } else { 12 };
println!("Vé: ${price}");}Kết quả:
Vé: $7Tóm tắt
Phần tiêu đề “Tóm tắt”if điều_kiện { ... }— không cần dấu ngoặc; điều kiện phải là mộtbool.- Nối thêm các phép kiểm tra bằng
else if, và dùngelsecho trường hợp còn lại. - Nối các điều kiện bằng
&&và||thay vì lồngiftrongif. ifcó thể được dùng như một biểu thức để tạo ra giá trị — hai nhánh phải cùng kiểu, và bạn cần cóelse.
Kiểm tra nhanh
Phần tiêu đề “Kiểm tra nhanh”Kiểm tra nhanh
1. Điều nào là bắt buộc với điều kiện của if trong Rust?
2. Khi dùng if như một biểu thức với let, cả hai nhánh phải thỏa điều gì?
Điểm: 0 / 2
Đọc thêm
Phần tiêu đề “Đọc thêm”ifExpressions — The Rust Book (tiếng Anh): hướng dẫn chính thức vềif,else if, và dùngiftrong mộtlet.- if/else — Rust by Example (tiếng Anh): một ví dụ chạy được cho thấy các nhánh tạo ra giá trị.
- If expressions — The Rust Reference (tiếng Anh): các quy tắc chính xác, cho lúc bạn muốn biết chi tiết.
- Rust on Exercism (tiếng Anh): bài tập luyện miễn phí có người hướng dẫn; những bài đầu tiên dùng
ifvàelserất nhiều.