Kolekcje Scala - opcja

Opcja Scala [T] jest kontenerem na zero lub jeden element danego typu. Opcją [T] może być dowolnaSome[T] lub Noneobiekt, który reprezentuje brakującą wartość. Na przykład metoda get mapy Scali generuje Some (wartość), jeśli zostanie znaleziona wartość odpowiadająca danemu kluczowi lubNone jeśli dany klucz nie jest zdefiniowany w Map.

Typ opcji jest często używany w programach Scala i można go porównać z nullwartość dostępna w Javie, która oznacza brak wartości. Na przykład metoda get z java.util.HashMap zwraca wartość przechowywaną w HashMap lub null, jeśli nie znaleziono żadnej wartości.

Powiedzmy, że mamy metodę, która pobiera rekord z bazy danych na podstawie klucza podstawowego.

def findPerson(key: Int): Option[Person]

Metoda zwróci wartość Some [Person], jeśli rekord zostanie znaleziony, ale None, jeśli rekord nie zostanie znaleziony. Prześledźmy następujący program.

Przykład

object Demo {
   def main(args: Array[String]) {
      val capitals = Map("France" -> "Paris", "Japan" -> "Tokyo")
      println("capitals.get( \"France\" ) : " +  capitals.get( "France" ))
      println("capitals.get( \"India\" ) : " +  capitals.get( "India" ))
   }
}

Zapisz powyższy program w formacie Demo.scala. Poniższe polecenia służą do kompilowania i wykonywania tego programu.

Komenda

\>scalac Demo.scala
\>scala Demo

Wynik

capitals.get( "France" ) : Some(Paris)
capitals.get( "India" ) : None

Najczęstszym sposobem rozdzielania wartości opcjonalnych jest dopasowanie do wzorca. Na przykład wypróbuj następujący program.

Przykład

object Demo {
   def main(args: Array[String]) {
      val capitals = Map("France" -> "Paris", "Japan" -> "Tokyo")
      println("show(capitals.get( \"Japan\")) : " + show(capitals.get( "Japan")) )
      println("show(capitals.get( \"India\")) : " + show(capitals.get( "India")) )
   }
   def show(x: Option[String]) = x match {
      case Some(s) => s
      case None => "?"
   }
}

Zapisz powyższy program w formacie Demo.scala. Poniższe polecenia służą do kompilowania i wykonywania tego programu.

Komenda

\>scalac Demo.scala
\>scala Demo

Wynik

show(capitals.get( "Japan")) : Tokyo
show(capitals.get( "India")) : ?

Korzystanie z metody getOrElse ()

Poniżej znajduje się przykładowy program pokazujący, jak używać metody getOrElse () w celu uzyskania dostępu do wartości lub wartości domyślnej, gdy żadna wartość nie jest obecna.

Przykład

object Demo {
   def main(args: Array[String]) {
      val a:Option[Int] = Some(5)
      val b:Option[Int] = None 
      println("a.getOrElse(0): " + a.getOrElse(0) )
      println("b.getOrElse(10): " + b.getOrElse(10) )
   }
}

Zapisz powyższy program w formacie Demo.scala. Poniższe polecenia służą do kompilowania i wykonywania tego programu.

Komenda

\>scalac Demo.scala
\>scala Demo

Wynik

a.getOrElse(0): 5
b.getOrElse(10): 10

Korzystanie z metody isEmpty ()

Poniżej znajduje się przykładowy program pokazujący, jak używać metody isEmpty () do sprawdzania, czy opcja ma wartość None, czy nie.

Przykład

object Demo {
   def main(args: Array[String]) {
      val a:Option[Int] = Some(5)
      val b:Option[Int] = None 
      println("a.isEmpty: " + a.isEmpty )
      println("b.isEmpty: " + b.isEmpty )
   }
}

Zapisz powyższy program w formacie Demo.scala. Poniższe polecenia służą do kompilowania i wykonywania tego programu.

Komenda

\>scalac Demo.scala
\>scala Demo

Przykład

a.isEmpty: false
b.isEmpty: true