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