문서 편집 권한이 없습니다. 다음 이유를 확인해주세요: 요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다: 사용자. 문서의 원본을 보거나 복사할 수 있습니다. [[분류: 프로그래밍 언어]] == 개요 == 패턴 매칭은 일련의 토큰들이 특정 패턴에 포함되는지를 판단하는 구문을 말한다. 패턴매칭은 Modern programming langauge에서 많이 사용되며, 특히 [[함수형 언어]]혹은 함수형 언어의 특징을 포함하는 언어들에서 많이 사용된다. 이러한 예시로는 [[Rust]], [[C#]], [[Scala]]와 같은 언어들이 있다. * sequence matching: 주어진 일련의 토큰들에서 구문의 위치를 파악하는 것이다. (e.g. where is the first "a" in "pattern_matching"?) * tree matching: 주어진 일련의 토큰의 구조에서 구문이 어떤 토큰에 포함되어 있는지를 파악하는 것이다. (e.g. what type of Nation(Korea)?) == 예시 == <syntaxhighlight lang="scala"> expr match { case variant_id_1(field_id_11, ... ) => expr1 case variant_id_2(field_id_22, ... ) => expr2 } </syntaxhighlight> 이를 좀더 구체적인 예로 생각해 보자면, <syntaxhighlight lang="scala"> shape match { case Triangle(a, b, c)=> a + b + c case Rectangle(h, w) => 2 * (h + w) _ => todo!() } </syntaxhighlight> 와 같이 shape의 타입을 판단하여 다른 결과를 가져오는 match패턴을 생각할 수 있다. == If-else / switch문과의 차이점 == If-else와 같은 문들은 컴파일러가 파악할 수 없다. 이에 반해, matching구분은 컴파일러가 매칭이 모두 이루워 지고 있는지, default는 선언되었는지, 타입이 일치하는지와 같은 semantic오류를 미리 파악할 수 있다. 따라서, matching은 if-else 혹은 switch보다 error prone하지 않다고 할 수 있다. Pattern matching 문서로 돌아갑니다.