PATTERN = shape + binding

패턴은 값을 꺼내는 자리마다 다른 규칙을 가진다

`for`, `let`, 함수 매개변수는 값이 반드시 맞아야 계속 진행되고, `match`와 `if let`은 실패 가능성을 분기 구조로 다룬다.

iteration

`for (index, value)`

enumerate() -> (0, 'a')

반복자가 만든 튜플을 바로 분해해 이름 두 개에 바인딩한다.

binding

`let (x, y, z)`

(1, 2, 3) -> x y z

패턴과 표현식의 전체 모양이 맞아야 세 변수가 동시에 만들어진다.

parameter

`&(x, y)`

&(3, 5) -> x=3, y=5

함수나 클로저의 인수 자리에서도 같은 방식으로 값을 분해할 수 있다.

must match

실패하면 코드가 이어질 수 없는 자리

`let`, `for`, 함수 매개변수는 값의 형태가 패턴과 맞아야 하므로 다음 절의 반박 불가능성 규칙으로 이어진다.

can branch

실패를 분기로 처리하는 자리

`match`, `if let`, `while let`은 매칭 성공과 실패를 코드 흐름의 선택으로 표현한다.