값을 패턴에 대해 검사하는 매커니즘이다.
성공적인 매치는 구성 요소로 값을 분해해낼 수 잇다.
자바의 switch문과 비슷하다.
import scala.util.Random
val x: Int = Random.nextInt(10)
x match {
case 0 => "zero"
case 1 => "one"
case 2 => "two"
case _ => "other"
}
import scala.util.Random
val x: Int = Random.nextInt(10)
x match
case 0 => "zero"
case 1 => "one"
case 2 => "two"
case _ => "other"
→ x는 0~10까지의 랜덤 숫자이다.
마지막 케이스 _ 는 전부다 캐치하는 경우이다. 캐이스들은 모두 대안이라고 부른다
def matchTest(x: Int): String = x match
case 1 => "one"
case 2 => "two"
case _ => "other"
matchTest(3) // returns other
matchTest(1) // returns one
→ 반환값이 모두 스트링 타입 값이다. 그러므로 함수 matchTest는 스트링을 반환한다.
sealed trait Notification
case class Email(sender: String, title: String, body: String) extends Notification
case class SMS(caller: String, message: String) extends Notification
case class VoiceRecording(contactName: String, link: String) extends Notification
def showNotification(notification: Notification): String =
notification match
case Email(sender, title, _) =>
s"You got an email from $sender with title: $title"
case SMS(number, message) =>
s"You got an SMS from $number! Message: $message"
case VoiceRecording(name, link) =>
s"You received a Voice Recording from $name! Click the link to hear it: $link"
val someSms = SMS("12345", "Are you there?")
val someVoiceRecording = VoiceRecording("Tom", "voicerecording.org/id/123")
println(showNotification(someSms)) // prints You got an SMS from 12345! Message: Are you there?
println(showNotification(someVoiceRecording)) // prints You received a Voice Recording from Tom! Click the link to hear it: voicerecording.org/id/123
Email(sender, title, _)
: 내부 요소들이 바로 매칭이 된다.
→ 매칭 시에 _ 로 인자를 선언해주면 무시할 수 있게 된다.