(새 문서: 분류: 프로그래밍 언어 == 개요 == 패턴 매칭은 일련의 토큰들이 특정 패턴에 포함되는지를 판단하는 구문을 말한다. 패턴매칭은 Modern programming langauge에서 많이 사용되며, 특히 함수형 언어혹은 함수형 언어의 특징을 포함하는 언어들에서 많이 사용된다. 이러한 예시로는 Rust, C#, Scala와 같은 언어들이 있다. * sequence matching: 주어진 일련의 토큰들에서...) |
편집 요약 없음 |
||
22번째 줄: | 22번째 줄: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
와 같이 shape의 타입을 판단하여 다른 결과를 가져오는 match패턴을 생각할 수 있다. | 와 같이 shape의 타입을 판단하여 다른 결과를 가져오는 match패턴을 생각할 수 있다. | ||
== If-else / switch문과의 차이점 == | |||
If-else와 같은 문들은 컴파일러가 파악할 수 없다. 이에 반해, matching구분은 컴파일러가 매칭이 모두 이루워 지고 있는지, default는 선언되었는지, 타입이 일치하는지와 같은 semantic오류를 미리 파악할 수 있다. 따라서, matching은 if-else 혹은 switch보다 error prone하지 않다고 할 수 있다. |
2023년 2월 25일 (토) 05:33 기준 최신판
개요
패턴 매칭은 일련의 토큰들이 특정 패턴에 포함되는지를 판단하는 구문을 말한다. 패턴매칭은 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)?)
예시
expr match {
case variant_id_1(field_id_11, ... ) => expr1
case variant_id_2(field_id_22, ... ) => expr2
}
이를 좀더 구체적인 예로 생각해 보자면,
shape match {
case Triangle(a, b, c)=> a + b + c
case Rectangle(h, w) => 2 * (h + w)
_ => todo!()
}
와 같이 shape의 타입을 판단하여 다른 결과를 가져오는 match패턴을 생각할 수 있다.
If-else / switch문과의 차이점
If-else와 같은 문들은 컴파일러가 파악할 수 없다. 이에 반해, matching구분은 컴파일러가 매칭이 모두 이루워 지고 있는지, default는 선언되었는지, 타입이 일치하는지와 같은 semantic오류를 미리 파악할 수 있다. 따라서, matching은 if-else 혹은 switch보다 error prone하지 않다고 할 수 있다.