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