Skip to content

Latest commit

 

History

History
43 lines (35 loc) · 1.64 KB

pattern-matching.md

File metadata and controls

43 lines (35 loc) · 1.64 KB
layout title partof num language next-page previous-page
tour
Dopasowanie wzorców (Pattern matching)
scala-tour
14
pl
singleton-objects
case-classes

Scala posiada wbudowany mechanizm dopasowania wzorców. Umożliwia on dopasowanie dowolnego rodzaju danych, przy czym zawsze zwracamy pierwsze dopasowanie. Przykład dopasowania liczby całkowitej:

object MatchTest1 extends App {
  def matchTest(x: Int): String = x match {
    case 1 => "one"
    case 2 => "two"
    case _ => "many"
  }
  println(matchTest(3))
}

Blok kodu z wyrażeniami case definiuje funkcję, która przekształca liczby całkowite na łańcuchy znaków. Słowo kluczowe match pozwala w wygodny sposób zastosować dopasowanie wzorca do obiektu.

Wzorce można także dopasowywać do różnych typów wartości:

object MatchTest2 extends App {
  def matchTest(x: Any): Any = x match {
    case 1 => "one"
    case "two" => 2
    case y: Int => "scala.Int"
  }
  println(matchTest("two"))
}

Pierwszy przypadek jest dopasowany, gdy x jest liczbą całkowitą równą 1. Drugi określa przypadek, gdy x jest równe łańcuchowi znaków "two". Ostatecznie mamy wzorzec dopasowania typu. Jest on spełniony, gdy x jest dowolną liczbą całkowitą oraz gwarantuje, że y jest (statycznie) typu liczby całkowitej.

Dopasowanie wzorca w Scali jest najbardziej użyteczne z wykorzystaniem typów algebraicznych modelowanych przez klasy przypadków. Scala pozwala też na używanie wzorców niezależnie od klas przypadków - używając metody unapply definiowanej przez obiekty ekstraktorów.