Rust ch17-2 · 패턴 반박 가능성

패턴은 값보다 먼저 놓인 자리 확인

let은 실패를 처리할 곳이 없고, if letlet else는 실패했을 때의 흐름을 코드로 표현한다.

letSome(x)를 둔 경우

error
let Some(x) = some_option_value;
None not covered

Option에는 None이 있을 수 있으므로 이 패턴은 실패할 수 있다.

let은 매칭 실패 뒤에 실행할 대안을 가질 수 없어서 반박 불가능한 패턴만 받는다.

if let으로 실패를 건너뛰는 경우

valid
if let Some(x) = some_option_value {
    println!("{}", x);
}
None이면 블록을 실행하지 않음

패턴이 맞을 때만 본문을 실행하므로 실패가 자연스러운 분기 조건이 된다.

값이 없을 때 아무 일도 하지 않아도 되는 상황이면 이 형태가 가장 짧다.

항상 맞는 패턴을 if let에 둔 경우

warning
if let x = 5 {
    println!("{}", x);
}
always match

x는 어떤 값이든 받으므로 조건 분기로 쓸 이유가 없다.

컴파일러가 제안하듯 단순한 let x = 5;로 바꾸는 편이 의도가 선명하다.

let

실패할 수 없는 패턴

모든 값이 반드시 변수나 구조에 들어맞을 때 사용한다.

if let

실패하면 건너뛰기

None처럼 관심 없는 경우를 조용히 지나가도 될 때 맞다.

let else

실패하면 빠져나가기

값이 없으면 return, break, panic! 같은 탈출이 필요할 때 쓴다.

match

모든 경우를 나누기

마지막 갈래가 남은 값을 받아 전체 경우를 빠짐없이 덮는다.