is_ok()와 is_err()
Coddy Rust 여정의 Logic & Flow 섹션에 포함된 레슨 — 66개 중 44번째.
때로는 실제 값을 추출하지 않고도 Result가 성공을 나타내는지 아니면 실패를 나타내는지 빠르게 확인해야 할 때가 있습니다. 러스트(Rust)는 이를 위해 두 가지 편리한 메서드인 .is_ok()와 .is_err()를 제공합니다.
두 메서드 모두 불리언(boolean) 값을 반환하므로, 간단한 조건부 확인에 사용하기에 완벽합니다. .is_ok() 메서드는 Result가 Ok이면 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를 소비하지 않으므로, 이후에도 계속해서 사용할 수 있습니다.
챌린지
쉬움두 개의 입력을 받게 됩니다. 첫 번째 입력은 숫자(문자열 형태)이고, 두 번째 입력은 상태 표시자(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를 출력합니다.
- 참(true)인 경우,
.is_err()를 사용하여 결과가 에러인지 확인합니다:- 참(true)인 경우,
Error detected를 출력합니다.
- 참(true)인 경우,
입력:
- 첫 번째 줄: 숫자 (예:
42) - 두 번째 줄:
success또는failure
출력:
- 상태가
success인 경우:Success detected - 상태가
failure인 경우:Error detected
치트 시트
Rust는 값을 추출하지 않고 Result의 상태를 확인하는 두 가지 메서드를 제공합니다:
.is_ok()-Result가Ok이면true를 반환하고, 그렇지 않으면false를 반환합니다..is_err()-Result가Err이면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()를 사용하여 결과를 확인하고 적절한 메시지를 출력합니다
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
Logic & Flow의 모든 레슨
7'Result'를 이용한 에러 처리
'Result'란 무엇인가요?'Result'와 함께 'match' 사용하기is_ok()와 is_err()단축 방법: unwrap과 expect물음표 연산자 '?'문자열을 숫자로 파싱하기요약 - 안전한 나눗셈 함수