Scala for Backend Engineering & Functional Programming · Lección

getOrElse y fold

Extraiga valores

Lección 3 de 413 pasos

getOrElse y fold es una lección gratuita de Scala for Backend Engineering & Functional Programming en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Scala for Backend Engineering & Functional Programming, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Scala for Backend Engineering & Functional Programming incluye 4 lecciones en total.

Obtener un valor

En algún momento necesitará extraer un valor sencillo de un Option y proporcionar algo razonable cuando sea None.

Scala ofrece extractores seguros como getOrElse y fold para hacerlo.

Usar getOrElse

getOrElse devuelve el valor dentro de un Some o un valor predeterminado que proporciona cuando es None.

Siempre devuelve un valor sencillo, nunca 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))
  }
}

El valor predeterminado es lazy

El valor predeterminado de getOrElse solo se evalúa cuando el Option es None. Por tanto, un valor predeterminado costoso no supone ningún coste cuando hay un valor presente.

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

Evitar get

Option tiene un método get, pero lanza una excepción cuando es None. Esto contradice el propósito de usar Option.

Es preferible usar getOrElse, fold o pattern matching.

orElse para Options alternativos

orElse es diferente: devuelve el primer Option si es un Some; de lo contrario, devuelve un Option alternativo.

Úselo para probar alternativas que también pueden estar vacías.

object Main {
  def main(args: Array[String]): Unit = {
    val primary: Option[Int] = None
    val backup: Option[Int] = Some(42)
    println(primary.orElse(backup))
  }
}

Introducción a fold

fold gestiona ambos casos en una sola llamada. Primero se proporciona un valor predeterminado para None y después una función para el valor de Some.

Devuelve un único resultado y transforma el valor cuando está presente.

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 sobre None

Cuando el Option es None, fold devuelve el valor predeterminado proporcionado primero e ignora la función de transformación.

object Main {
  def main(args: Array[String]): Unit = {
    val empty: Option[Int] = None
    val result = empty.fold(-1)(x => x * 2)
    println(result)
  }
}

fold a un tipo diferente

Ambas ramas de fold deben devolver el mismo tipo, pero este puede ser diferente del tipo del valor del Option.

Aquí convertimos un Option[Int] en un 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))
  }
}

Elegir entre ellos

Guía rápida:

  • getOrElse: proporciona un valor predeterminado del mismo tipo
  • orElse: proporciona una Option alternativa
  • fold: transforma el valor y proporciona un valor predeterminado en un solo paso
  • pattern matching: cuando cada caso necesita lógica adicional

Combinar con map

Un modismo habitual consiste en usar primero map para transformar y después getOrElse para obtener un valor simple.

object Main {
  def main(args: Array[String]): Unit = {
    val name: Option[String] = Some("ada")
    val display = name.map(_.toUpperCase).getOrElse("ANON")
    println(display)
  }
}

Integrarlo todo

Busque un valor de configuración, proporcione una Option alternativa y, finalmente, obtenga un valor predeterminado con 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)
  }
}

Comprobación rápida

Compruebe si ha entendido cómo extraer valores de Option.

Resumen

Ha aprendido a extraer valores de Option de forma segura:

  • getOrElse(default) devuelve el valor o uno predeterminado (evaluado de forma diferida)
  • orElse(fallback) devuelve el primer Some o una Option alternativa
  • fold(default)(f) transforma un Some y proporciona un valor predeterminado para un None en un solo paso
  • Evite get, que lanza una excepción con None
Gratis para empezar

Aprende Scala con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
39
Lecciones
143

Preguntas frecuentes

¿La lección «getOrElse y fold» es gratis?

Sí — el texto completo de «getOrElse y fold» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Scala for Backend Engineering & Functional Programming, actualiza a CoddyKit PRO. El curso de Scala for Backend Engineering & Functional Programming incluye 4 lecciones en total.

¿Qué aprenderé en «getOrElse y fold»?

Extraiga valores Practicas Scala for Backend Engineering & Functional Programming con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Scala for Backend Engineering & Functional Programming?

No se requiere experiencia previa. Scala for Backend Engineering & Functional Programming en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «getOrElse y fold»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Scala for Backend Engineering & Functional Programming?

Sí. Cada lección de Scala for Backend Engineering & Functional Programming incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Cómo evitar null
  2. map y flatMap sobre Option
  3. getOrElse y fold
  4. Option en for-comprehensions
← Volver a Scala for Backend Engineering & Functional Programming