14.1. Wyrażenie match
Język Scala posiada wyrażenie match, które pozwala na dopasowanie podanej w nim wartości do jednego ze zdefiniowanych wzorców oraz na wykonanie kodu powiązanego z dopasowanym wzorcem. W pliku PatternMatch1.scala znajduje się przykład zastosowania tego wyrażenia.
Plik PatternMatch1.scala: def simpleMatch(value: Int):String = value match { case 1 => "one" case 2 => "two" case 3 => "three" }
Zdefiniowana w tym pliku metoda simpleMatch zwraca tekstową wartość liczb 1, 2 lub 3.
scala> :load PatternMatch1.scala Loading PatternMatch1.scala... simpleMatch: (value: Int)String scala> simpleMatch(1) res0: String = one scala> simpleMatch(2) res1: String = two scala> simpleMatch(3) res2: String = three
Działanie wyrażenia match polega na dopasowywaniu wartości znajdującej się z lewej strony słowa match do listy przypadków znajdującej się po prawej stronie. Lista przypadków składa się z klauzul mających jedną z poniższych postaci, umieszczonych w nawiasach klamrowych:
- case wzorzec => instrukcje
- case wzorzec ⇒ instrukcje
Każda z klauzul składa się ze słowa kluczowego case, wzorca, do którego jest wykonywane dopasowanie, podwójnej strzałki w prawo (znaki => lub znak ⇒) oraz opcjonalnych instrukcji wykonywanych w przypadku poprawnego dopasowania.
Wzorce występujące w klauzulach case wyrażenia match mogą być nie tylko literałami, tak jak w przykładzie z pliku PatternMatch1.scala, ale mogą mieć bardziej rozbudowaną postać. Mogą również zawierać zmienne. Dopasowanie wartości do listy przypadków odbywa się przy pomocy operacji zwanej dopasowaniem wzorców, która polega na sprawdzeniu, czy dana wartość odpowiada podanemu wzorcowi oraz — w przypadku odpowiedzi twierdzącej — przypisaniu zmiennym z wzorca wartości. Wartość znajdująca się z lewej strony słowa kluczowego match jest dopasowywana po kolei do kolejnych wzorców. W przypadku znalezienia pierwszego pasującego dopasowania, wykonywane są instrukcje znajdujące się po prawej stronie strzałki w dopasowanej klauzuli case. Wynik wykonania tych instrukcji staje się wynikiem całego wyrażenia match. Kolejne wzorce nie są już dopasowywane. Wartości zmiennych z dopasowanego wzorca mogą być używane w kodzie znajdującym się po podwójnej strzałce.
![]() | Specyfikacja języka Scala opisuje wzorce w punktach 8.1 i 10.2, a wyrażenie match w punkcie 8.4. |
Plik PatternMatch1.scala:
def simpleMatch(value: Int):String =
value match {
case 1 => "one"
case 2 => "two"
case 3 => "three"
}

