refutable vs irrefutable

패턴이 실패할 수 있으면 실패를 처리하는 문법을 선택한다

`Some(x)`는 `None`을 덮지 못하므로, `let`처럼 반드시 성공해야 하는 자리에 바로 둘 수 없다.

irrefutable required

`let`, 함수 매개변수, `for`

let (x, y) = point;

모든 가능한 입력이 패턴과 맞아야 다음 코드가 의미 있게 이어진다.

refutable allowed

`if let`, `while let`, `match` 갈래

if let Some(x) = value { ... }

매칭 실패가 자연스러운 조건이므로 성공 경로와 나머지 경로를 분리한다.

compile error

`let Some(x)`

`None`일 때 바인딩할 값이 없으므로 지역 바인딩으로는 부적합하다.

valid branch

`if let Some(x)`

성공하면 블록을 실행하고 실패하면 건너뛰므로 의도가 명확하다.

warning

`if let x = 5`

항상 성공하는 패턴은 조건 분기가 필요 없으므로 `let`으로 충분하다.