Collections Scala - Option

L'option Scala [T] est un conteneur pour zéro ou un élément d'un type donné. Une option [T] peut être soitSome[T] ou Noneobjet, qui représente une valeur manquante. Par exemple, la méthode get de Scala's Map produit Some (value) si une valeur correspondant à une clé donnée a été trouvée, ouNone si la clé donnée n'est pas définie dans la carte.

Le type d'option est fréquemment utilisé dans les programmes Scala et vous pouvez le comparer avec le nullvaleur disponible en Java qui n'indique aucune valeur. Par exemple, la méthode get de java.util.HashMap retourne soit une valeur stockée dans le HashMap, soit null si aucune valeur n'a été trouvée.

Disons que nous avons une méthode qui récupère un enregistrement de la base de données sur la base d'une clé primaire.

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

La méthode retournera Some [Person] si l'enregistrement est trouvé, mais None si l'enregistrement n'est pas trouvé. Suivons le programme suivant.

Exemple

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" ))
   }
}

Enregistrez le programme ci-dessus dans Demo.scala. Les commandes suivantes sont utilisées pour compiler et exécuter ce programme.

Commander

\>scalac Demo.scala
\>scala Demo

Production

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

Le moyen le plus courant de séparer les valeurs facultatives consiste à effectuer une correspondance de modèle. Par exemple, essayez le programme suivant.

Exemple

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 => "?"
   }
}

Enregistrez le programme ci-dessus dans Demo.scala. Les commandes suivantes sont utilisées pour compiler et exécuter ce programme.

Commander

\>scalac Demo.scala
\>scala Demo

Production

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

Utilisation de la méthode getOrElse ()

Voici l'exemple de programme pour montrer comment utiliser la méthode getOrElse () pour accéder à une valeur ou à une valeur par défaut lorsqu'aucune valeur n'est présente.

Exemple

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) )
   }
}

Enregistrez le programme ci-dessus dans Demo.scala. Les commandes suivantes sont utilisées pour compiler et exécuter ce programme.

Commander

\>scalac Demo.scala
\>scala Demo

Production

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

Utilisation de la méthode isEmpty ()

Voici l'exemple de programme pour montrer comment utiliser la méthode isEmpty () pour vérifier si l'option est None ou non.

Exemple

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 )
   }
}

Enregistrez le programme ci-dessus dans Demo.scala. Les commandes suivantes sont utilisées pour compiler et exécuter ce programme.

Commander

\>scalac Demo.scala
\>scala Demo

Exemple

a.isEmpty: false
b.isEmpty: true