getOrElse y fold
Extraiga valores
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 tipoorElse: proporciona una Option alternativafold: 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 alternativafold(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
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.