English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Le type Option en Scala est utilisé pour représenter une valeur optionnelle (avec ou sans valeur).
Option[T] est un conteneur de valeur optionnelle de type T : si la valeur existe, Option[T] est Some[T], et si elle n'existe pas, Option[T] est l'objet None.
Ensuite, regardons un segment de code :
// Bien que Scala puisse ne pas définir le type d'une variable, pour une meilleure clarté, je préfère quand même le faire
// lequel est défini explicitement
val myMap: Map[String, String] = Map("key1" -> "value")
val value1: Option[String] = myMap.get("key1")
val value2: Option[String] = myMap.get("key2")
println(value1) // Some("value1")
println(value2) // None
Dans le code ci-dessus, myMap est un hash map dont le type de clé est String et le type de valeur est String, mais ce qui différencie est que son get() retourne un type Option[String].
Scala utilise Option[String] pour vous dire : « Je vais essayer de vous renvoyer une chaîne de caractères, mais je peux aussi ne pas vous en donner ».
Il n'y a pas de clé dans myMap2 Ce données, la méthode get() renvoie None.
Option a deux sous-catégories, l'une est Some, l'autre est None, lorsqu'il renvoie Some, cela signifie que cette fonction a réussi à vous donner une chaîne de caractères, et vous pouvez obtenir cette chaîne de caractères à travers la fonction get(), si elle renvoie None, cela signifie qu'il n'y a pas de chaîne de caractères à vous donner.
Un autre exemple :
object Test {
def main(args: Array[String]) {
val sites = Map40;"w3codebox" -> "fr.oldtoolbag.com", "google" -> "www.google.com")
println("sites.get( \"w3codebox\" ) : " + sites.get( "w3codebox" )) // Some(fr.oldtoolbag.com)
println("sites.get( \"baidu\" ) : " + sites.get( "baidu" )) // None
}
}
Exécutez le code suivant, le résultat est :
$ scalac Test.scala $ scala Test sites.get( "w3codebox" ) : Some(fr.oldtoolbag.com) sites.get( "baidu" ) : None
Vous pouvez également utiliser la correspondance de modèle pour afficher les valeurs correspondantes. Voici un exemple :
object Test {
def main(args: Array[String]) {
val sites = Map40;"w3codebox" -> "fr.oldtoolbag.com", "google" -> "www.google.com")
println("show(sites.get( \"w3codebox\")) : " +
show(sites.get( "w3codebox")) )
println("show(sites.get( \"baidu\")) : " +
show(sites.get( "baidu")) )
}
def show(x: Option[String]) = x match {
case Some(s) => s
case None => "?"
}
}
Exécutez le code suivant, le résultat est :
$ scalac Test.scala $ scala Test show(sites.get( "w3codebox")) : fr.oldtoolbag.com show(sites.get( "baidu")) : ?
Vous pouvez utiliser la méthode getOrElse() pour obtenir l'élément existant dans le tuple ou utiliser sa valeur par défaut, voici un exemple :
object Test {
def main(args: Array[String]) {
val a:Option[Int] = Some(5)
val b:Option[Int] = None
println("a.getOrElse(0): " + a.getOrElse40;0) )
println("b.getOrElse(10): " + b.getOrElse40;10) )
}
}
Exécutez le code suivant, le résultat est :
$ scalac Test.scala $ scala Test a.getOrElse(0): 5 b.getOrElse(10): 10
Vous pouvez utiliser la méthode isEmpty() pour vérifier si l'élément d'un tuple est None, voici un exemple :
object Test {
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 )
}
}
Exécutez le code suivant, le résultat est :
$ scalac Test.scala $ scala Test a.isEmpty: false b.isEmpty: true
Le tableau suivant liste les méthodes couramment utilisées de Scala Option :
Numéro | Méthodes et descriptions |
---|---|
1 |
def get: A Obtient la valeur optionnelle |
2 |
def isEmpty: Boolean Vérifie si la valeur de type optionnel est None, retourne true si c'est le cas, sinon retourne false |
3 |
def productArity: Int Retourne le nombre d'éléments, A(x_1, ..., x_k), retourne k |
4 |
def productElement(n: Int): Any Obtient l'option spécifiée, avec 0 comme point de départ. C'est-à-dire A(x_1, ..., x_k), retourne x_(n+1) , 0 < n < k. |
5 |
def exists(p: (A) => Boolean): Boolean Retourne true si l'élément spécifié dans l'option existe et n'est pas None, sinon retourne false. |
6 |
def filter(p: (A) => Boolean): Option[A] Si l'option contient une valeur et que la fonction de condition passée à filter retourne true, filter retourne Some exemple. Sinon, la valeur de retour est None. |
7 |
def filterNot(p: (A) => Boolean): Option[A] Si l'option contient une valeur et que la fonction de condition passée à filter retourne false, filter retourne Some exemple. Sinon, la valeur de retour est None. |
8 |
def flatMap[B](f: (A) => Option[B]): Option[B] Si l'option contient une valeur, transmet à la fonction f pour traitement et retourne, sinon retourne None |
9 |
def foreach[U](f: (A) => U): Unit Si l'option contient une valeur, transmet chaque valeur à la fonction f, sinon ne traite pas. |
10 |
def getOrElse[B >: A](default: => B): B Si l'option contient une valeur, retourne la valeur de l'option, sinon retourne la valeur par défaut définie. |
11 |
def isDefined: Boolean Si la valeur optionnelle est un exemple de Some, retourne true, sinon retourne false. |
12 |
def iterator: Iterator[A] Si l'option contient une valeur, itère sur la valeur optionnelle. Si la valeur optionnelle est vide, retourne un itérateur vide. |
13 |
def map[B](f: (A) => B): Option[B] Si l'option contient une valeur, retourne Some traité par la fonction f, sinon retourne None |
14 |
def orElse[B >: A](alternative: => Option[B]): Option[B] Si une Option est None, la méthode orElse retourne la valeur du paramètre de nom en tant que valeur, sinon, elle retourne directement cette Option. |
15 |
def orNull Si l'option contient une valeur, retourne la valeur de l'option, sinon retourne null. |