Menu
Coddy logo textTech

is_ok()와 is_err()

Coddy Rust 여정의 Logic & Flow 섹션에 포함된 레슨 — 66개 중 44번째.

때로는 실제 값을 추출하지 않고도 Result가 성공을 나타내는지 아니면 실패를 나타내는지 빠르게 확인해야 할 때가 있습니다. 러스트(Rust)는 이를 위해 두 가지 편리한 메서드인 .is_ok().is_err()를 제공합니다.

두 메서드 모두 불리언(boolean) 값을 반환하므로, 간단한 조건부 확인에 사용하기에 완벽합니다. .is_ok() 메서드는 ResultOk이면 true를 반환하고, Err이면 false를 반환합니다. .is_err() 메서드는 그 반대로 작동합니다:

let success: Result = Ok(42);
let failure: Result = Err("Something went wrong");

if success.is_ok() {
    println!("Operation succeeded!");
}

if failure.is_err() {
    println!("Operation failed!");
}

이 메서드들은 내부의 구체적인 값에 신경 쓰지 않고 결과 상태만 확인하면 될 때 특히 유용합니다. match와 달리 Result를 소비하지 않으므로, 이후에도 계속해서 사용할 수 있습니다.

challenge icon

챌린지

쉬움

두 개의 입력을 받게 됩니다. 첫 번째 입력은 숫자(문자열 형태)이고, 두 번째 입력은 상태 표시자(success 또는 failure)입니다. 상태에 따라 Result<i32, &'static str>를 생성하세요. 상태가 success이면 파싱된 숫자를 포함하는 Ok를 생성합니다. 상태가 failure이면 "Operation failed"라는 메시지와 함께 Err를 생성합니다. .is_ok().is_err()를 사용하여 결과 상태를 확인하고 적절한 메시지를 출력하세요.

요구 사항:

  • 첫 번째 입력(숫자)을 읽고 공백을 제거합니다.
  • 첫 번째 입력을 i32로 파싱합니다.
  • 두 번째 입력(상태)을 읽고 공백을 제거합니다.
  • Result<i32, &'static str> 변수를 생성합니다:
    • 상태가 success이면, Ok(parsed_number)를 할당합니다.
    • 상태가 failure이면, Err("Operation failed")를 할당합니다.
  • .is_ok()를 사용하여 결과가 성공인지 확인합니다:
    • 참(true)인 경우, Success detected를 출력합니다.
  • .is_err()를 사용하여 결과가 에러인지 확인합니다:
    • 참(true)인 경우, Error detected를 출력합니다.

입력:

  • 첫 번째 줄: 숫자 (예: 42)
  • 두 번째 줄: success 또는 failure

출력:

  • 상태가 success인 경우: Success detected
  • 상태가 failure인 경우: Error detected

치트 시트

Rust는 값을 추출하지 않고 Result의 상태를 확인하는 두 가지 메서드를 제공합니다:

  • .is_ok() - ResultOk이면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
  • .is_err() - ResultErr이면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
let success: Result<i32, &str> = Ok(42);
let failure: Result<i32, &str> = Err("Something went wrong");

if success.is_ok() {
    println!("Operation succeeded!");
}

if failure.is_err() {
    println!("Operation failed!");
}

이 메서드들은 결과 상태만 알면 되는 간단한 조건부 확인에 유용합니다. match와 달리 Result를 소비하지 않으므로, 나중에 다시 사용할 수 있습니다.

직접 해보기

use std::io;

fn main() {
    // 첫 번째 입력(숫자)을 읽습니다
    let mut number_input = String::new();
    io::stdin().read_line(&mut number_input).expect("Failed to read line");
    let number_input = number_input.trim();
    
    // 숫자를 i32 타입으로 파싱합니다
    let parsed_number: i32 = number_input.parse().expect("Failed to parse number");
    
    // 두 번째 입력(상태)을 읽습니다
    let mut status = String::new();
    io::stdin().read_line(&mut status).expect("Failed to read line");
    let status = status.trim();
    
    // TODO: 상태에 따라 Result<i32, &'static str>를 생성합니다
    // 상태가 "success"이면 Ok(parsed_number)를 생성합니다
    // 상태가 "failure"이면 Err("Operation failed")를 생성합니다
    
    // TODO: .is_ok()와 .is_err()를 사용하여 결과를 확인하고 적절한 메시지를 출력합니다
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

Logic & Flow의 모든 레슨