패턴 실패를 처리할 수 있는 문법 위치를 고른다

패턴의 반박 가능성은 값의 문제가 아니라, 불일치 경로를 해당 문법이 처리할 수 있는지의 문제다.

질문 1 · 패턴Some(x)가 모든 값과 일치하는가?
아니오 · 실패 가능불일치 경로가 있는 위치로 옮긴다

if let

불일치하면 건너뛴다. 한 패턴의 성공 경로만 필요할 때 쓴다.

let ... else

실패 시 빠져나간다. else는 return·break·panic처럼 발산해야 한다.

match

모든 경우를 나눈다. 각 arm이 아니라 arm 전체가 빠짐없이 값을 덮어야 한다.

while let

일치하는 동안 반복한다. 첫 불일치가 반복 종료 조건이 된다.

E0005 refutable pattern일반 let·함수 매개변수·for는 항상 일치해야 한다.
irrefutable pattern 경고if let x = 5처럼 분기가 늘 성공하면 일반 let이 더 정확하다.
E0004 non-exhaustivematch에서 빠진 값은 arm을 추가해 전체 포괄성을 회복한다.

핵심: 실패할 수 없는 위치에는 irrefutable 패턴을, 실패 경로가 있는 위치에는 refutable 패턴을 배치한다.