match 는 망라적인데, 강력하지만 정확히 한 패턴에만 관심 있을 땐 장황해. let 계열 구문들이 그 흔한 경우의 ergonomic 단축이야.
if let — 한 패턴, 나머지 무시
if let Some(x) = opt { ... } 는 패턴이 맞을 때만 블록을 돌리고, 안에서 쓰게 x 를 바인딩해. 나머지는 다 조용히 건너뛰어. 안 맞는 경우엔 else 를 더할 수 있고. 정확히 진짜 arm 하나랑 _ => {} 있는 match 인데, 의식 없이.
let else — 매칭하거나 빠져나가기
let Some(x) = opt else { return; }; 는 패턴이 맞으면 x 를 바인딩하고, 아니면 else 블록을 돌리는데 그게 반드시 diverge 해야 해 (return, break, panic). 이 줄 뒤로 x 가 함수 나머지에서 쓸 수 있어 — 중첩 없이. 함수 맨 위에서 '이게 없으면 여기서 멈춰' 를 처리하는 깔끔한 방법이야.
let else 가 happy path 를 평평하게 해. 함수 본문 전체를
if let { ... } 으로 감싸는 대신, let ... else { return } 으로 나쁜 경우를 일찍 처리하고 메인 로직을 안 들여쓰게 둬. early-return 가드 절에 대한 Rust 의 답이야.while let — 패턴이 실패할 때까지 루프
while let Some(x) = iter.next() { ... } 는 패턴이 맞는 동안 계속 루프하고, None 을 받는 순간 멈춰. 스택을 비우거나, 이터레이터를 수동으로 소비하거나, 큐를 빌 때까지 처리하는 자연스러운 방법이야.