getOrElse et fold
Extrayez des valeurs
getOrElse et fold est une leçon Scala for Backend Engineering & Functional Programming gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Scala for Backend Engineering & Functional Programming, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Scala for Backend Engineering & Functional Programming comprend 4 leçons au total.
Extraire une valeur
Vous devez finalement extraire une valeur ordinaire d’un Option, en fournissant une valeur raisonnable lorsqu’il vaut None.
Scala fournit pour cela des extracteurs sûrs comme getOrElse et fold.
Utiliser getOrElse
getOrElse renvoie la valeur contenue dans un Some, ou une valeur par défaut que vous fournissez lorsqu’il vaut None.
Il vous donne toujours une valeur ordinaire, jamais un Option.
object Main {
def main(args: Array[String]): Unit = {
val a: Option[Int] = Some(5)
val b: Option[Int] = None
println(a.getOrElse(0))
println(b.getOrElse(0))
}
}La valeur par défaut est évaluée paresseusement
La valeur par défaut de getOrElse n’est évaluée que lorsque l’Option vaut None. Une valeur par défaut coûteuse ne coûte donc rien lorsqu’une valeur est présente.
object Main {
def expensiveDefault(): Int = { println("computing default"); 99 }
def main(args: Array[String]): Unit = {
val present: Option[Int] = Some(7)
println(present.getOrElse(expensiveDefault()))
}
}Éviter get
Option possède une méthode get, mais celle-ci lève une exception sur None. Cela va à l’encontre de l’objectif d’Option.
Préférez getOrElse, fold ou une correspondance de motifs.
orElse pour les Options de repli
orElse est différent : il renvoie le premier Option s’il s’agit d’un Some, sinon il renvoie un Option de repli.
Utilisez-le pour essayer des solutions de remplacement qui peuvent elles-mêmes être vides.
object Main {
def main(args: Array[String]): Unit = {
val primary: Option[Int] = None
val backup: Option[Int] = Some(42)
println(primary.orElse(backup))
}
}Découvrir fold
fold gère les deux cas en un seul appel. Vous fournissez d’abord une valeur par défaut pour None, puis une fonction pour la valeur de Some.
Il renvoie un résultat unique et transforme la valeur lorsqu’elle est présente.
object Main {
def main(args: Array[String]): Unit = {
val n: Option[Int] = Some(10)
val result = n.fold(0)(x => x * 2)
println(result)
}
}fold sur None
Lorsque l’Option vaut None, fold renvoie la valeur par défaut fournie en premier et ignore la fonction de transformation.
object Main {
def main(args: Array[String]): Unit = {
val empty: Option[Int] = None
val result = empty.fold(-1)(x => x * 2)
println(result)
}
}fold vers un type différent
Les deux branches de fold doivent renvoyer le même type, mais ce type peut différer du type de valeur de l’Option.
Ici, nous transformons un Option[Int] en String.
object Main {
def describe(o: Option[Int]): String =
o.fold("missing")(x => s"value $x")
def main(args: Array[String]): Unit = {
println(describe(Some(8)))
println(describe(None))
}
}Choisir entre ces méthodes
Guide rapide :
getOrElse: fournir une valeur par défaut du même typeorElse: fournir un Option de replifold: transformer la valeur et fournir une valeur par défaut en une seule étape- correspondance de motifs : lorsque chaque cas nécessite une logique plus élaborée
Combiner avec map
Une construction courante consiste à utiliser d’abord map pour transformer, puis getOrElse pour obtenir une valeur ordinaire.
object Main {
def main(args: Array[String]): Unit = {
val name: Option[String] = Some("ada")
val display = name.map(_.toUpperCase).getOrElse("ANON")
println(display)
}
}Assembler le tout
Rechercher une valeur de configuration, fournir un Option de repli, puis obtenir une valeur par défaut avec getOrElse.
object Main {
val env = Map("timeout" -> "30")
def main(args: Array[String]): Unit = {
val timeout = env.get("timeout")
.flatMap(_.toIntOption)
.getOrElse(60)
println(timeout)
val retries = env.get("retries").fold(3)(_.toInt)
println(retries)
}
}Vérification rapide
Vérifiez votre compréhension de l’extraction des valeurs d’un Option.
Récapitulatif
Vous avez appris à extraire les valeurs d’un Option en toute sécurité :
getOrElse(default)renvoie la valeur ou une valeur par défaut (évaluée paresseusement)orElse(fallback)renvoie le premierSomeou unOptionde remplacementfold(default)(f)transforme unSomeet fournit une valeur par défaut pour unNoneen une seule étape- Évitez
get, qui lève une exception avecNone
Apprends Scala avec un tuteur IA — gratuit
Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.
- Cours
- 39
- Leçons
- 143
Questions Fréquemment Posées
La leçon « getOrElse et fold » est-elle gratuite ?
Oui — le texte complet de « getOrElse et fold » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Scala for Backend Engineering & Functional Programming, passe à CoddyKit PRO. Le cours Scala for Backend Engineering & Functional Programming comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « getOrElse et fold » ?
Extrayez des valeurs Tu pratiques Scala for Backend Engineering & Functional Programming avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Scala for Backend Engineering & Functional Programming ?
Aucune expérience préalable n'est requise. Scala for Backend Engineering & Functional Programming sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « getOrElse et fold » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Scala for Backend Engineering & Functional Programming ?
Oui. Chaque leçon Scala for Backend Engineering & Functional Programming inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.