Collezioni Scala - Opzione
L'opzione Scala [T] è un contenitore per zero o un elemento di un dato tipo. Un'opzione [T] può essere una delle dueSome[T] o Noneoggetto, che rappresenta un valore mancante. Ad esempio, il metodo get di Scala's Map produce Some (value) se è stato trovato un valore corrispondente a una data chiave, oNone se la chiave data non è definita nella mappa.
Il tipo di opzione è usato frequentemente nei programmi Scala e puoi confrontarlo con il nullvalore disponibile in Java che non indica alcun valore. Ad esempio, il metodo get di java.util.HashMap restituisce un valore memorizzato in HashMap o null se non è stato trovato alcun valore.
Supponiamo di avere un metodo che recupera un record dal database in base a una chiave primaria.
def findPerson(key: Int): Option[Person]
Il metodo restituirà Some [Person] se il record viene trovato ma None se il record non viene trovato. Seguiamo il seguente programma.
Esempio
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" ))
}
}
Salvare il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.
Comando
\>scalac Demo.scala
\>scala Demo
Produzione
capitals.get( "France" ) : Some(Paris)
capitals.get( "India" ) : None
Il modo più comune per separare i valori facoltativi è attraverso una corrispondenza di pattern. Ad esempio, prova il seguente programma.
Esempio
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 => "?"
}
}
Salvare il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.
Comando
\>scalac Demo.scala
\>scala Demo
Produzione
show(capitals.get( "Japan")) : Tokyo
show(capitals.get( "India")) : ?
Utilizzo del metodo getOrElse ()
Di seguito è riportato il programma di esempio per mostrare come utilizzare il metodo getOrElse () per accedere a un valore o un valore predefinito quando non è presente alcun valore.
Esempio
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) )
}
}
Salvare il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.
Comando
\>scalac Demo.scala
\>scala Demo
Produzione
a.getOrElse(0): 5
b.getOrElse(10): 10
Utilizzo del metodo isEmpty ()
Di seguito è riportato il programma di esempio per mostrare come utilizzare il metodo isEmpty () per verificare se l'opzione è Nessuno o meno.
Esempio
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 )
}
}
Salvare il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.
Comando
\>scalac Demo.scala
\>scala Demo
Esempio
a.isEmpty: false
b.isEmpty: true