Menu
CoddyTech

is_some() và is_none()

Thuộc phần Logic và luồng chương trình trong hành trình Rust của Coddy. Bài học 37 trên 66.

Đôi khi, bạn cần kiểm tra xem Option có chứa giá trị hay không mà không cần lấy giá trị đó ra. Rust cung cấp hai phương thức tiện lợi cho việc này: .is_some() và .is_none().

Cả hai phương thức đều trả về giá trị boolean, nên rất phù hợp để dùng trong các điều kiện if:

let maybe_score = Some(85);

if maybe_score.is_some() {
    println!("We have a score!");
}

if maybe_score.is_none() {
    println!("No score available");
}

Phương thức .is_some() trả về true nếu Option chứa giá trị Some, và trả về false nếu đó là None. Phương thức .is_none() hoạt động theo cách ngược lại: trả về true với None và false với Some.

challenge icon

Thử thách

Dễ

Bạn sẽ nhận một số làm đầu vào. Hãy tạo một Option<i32> chứa Some(number) nếu số đó là số dương, hoặc None nếu số đó bằng không hoặc âm. Dùng .is_some() và .is_none() để kiểm tra Option và in ra thông báo phù hợp.

Yêu cầu:

  • Đọc đầu vào và chuyển thành i32
  • Tạo một biến Option<i32>:
    • Nếu số đó là số dương (lớn hơn 0), gán Some(number)
    • Nếu số đó bằng không hoặc âm, gán None
  • Dùng .is_some() để kiểm tra xem Option có chứa giá trị hay không
  • Nếu .is_some() trả về true, in ra: Positive number detected
  • Dùng .is_none() để kiểm tra xem Option có rỗng hay không
  • Nếu .is_none() trả về true, in ra: No positive number

Đầu vào:

  • Một số nguyên duy nhất (ví dụ: 42, 0 hoặc -5)

Đầu ra:

  • Nếu số đó là số dương: Positive number detected
  • Nếu số đó bằng không hoặc âm: No positive number

Tự làm thử

use std::io;

fn main() {
    // Đọc đầu vào
    let mut input = String::new();
    io::stdin().read_line(&mut input).expect("Failed to read line");
    let number: i32 = input.trim().parse().expect("Invalid input");
    
    // TODO: Viết code bên dưới
    // Tạo Option<i32> tùy theo số đó có dương hay không
    
    // Kiểm tra xem Option có là Some không rồi in ra thông báo phù hợp
    
}
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Logic và luồng chương trình

Tự luyện tập: Trình biên dịch Rust online