Scala for Backend Engineering & Functional Programming · Leçon

getOrElse et fold

Extrayez des valeurs

Leçon 3 sur 413 étapes

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 type
  • orElse : fournir un Option de repli
  • fold : 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 premier Some ou un Option de remplacement
  • fold(default)(f) transforme un Some et fournit une valeur par défaut pour un None en une seule étape
  • Évitez get, qui lève une exception avec None
Gratuit pour commencer

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.

Toutes les leçons de ce cours

  1. Éviter null
  2. map et flatMap sur Option
  3. getOrElse et fold
  4. Option dans les compréhensions for
← Retour à Scala for Backend Engineering & Functional Programming