Cómo evitar null
Conceptos básicos de Option
Cómo evitar null es una lección gratuita de Scala for Backend Engineering & Functional Programming en CoddyKit. Esta es la lección 1 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.
El problema de null
En muchos lenguajes, un valor ausente se representa mediante null. Sin embargo, null provoca el temido NullPointerException cuando se olvida comprobarlo.
Scala ofrece una alternativa más segura: el tipo Option.
¿Qué es Option?
Option[A] representa un valor que puede estar presente o no. Tiene exactamente dos casos:
Some(value)cuando existe un valorNonecuando no hay ningún valor
El propio tipo indica que puede faltar un valor.
object Main {
def main(args: Array[String]): Unit = {
val present: Option[Int] = Some(42)
val absent: Option[Int] = None
println(present)
println(absent)
}
}Crear Some
Envuelva un valor existente en Some para indicar que está presente con certeza.
object Main {
def main(args: Array[String]): Unit = {
val name: Option[String] = Some("Ada")
println(name)
}
}Representar la ausencia con None
None es el único valor que se usa cuando no hay nada. Funciona con cualquier tipo Option.
object Main {
def lookup(found: Boolean): Option[Int] =
if (found) Some(100) else None
def main(args: Array[String]): Unit = {
println(lookup(true))
println(lookup(false))
}
}Funciones que pueden fallar
Devolver Option hace explícita en la signatura de tipo la posibilidad de no obtener ningún resultado. Quien llama no puede ignorarla.
object Main {
def findUser(id: Int): Option[String] =
if (id == 1) Some("Grace") else None
def main(args: Array[String]): Unit = {
println(findUser(1))
println(findUser(2))
}
}Comprobar con isDefined e isEmpty
isDefined indica si un Option es un Some, y isEmpty indica si es None.
object Main {
def main(args: Array[String]): Unit = {
val a: Option[Int] = Some(5)
val b: Option[Int] = None
println(a.isDefined)
println(b.isEmpty)
}
}Pattern matching sobre un Option
Como Option es un ADT sellado, puede usar pattern matching sobre él. Así se gestionan claramente tanto la presencia como la ausencia.
object Main {
def greet(name: Option[String]): String = name match {
case Some(n) => s"Hello, $n"
case None => "Hello, stranger"
}
def main(args: Array[String]): Unit = {
println(greet(Some("Bo")))
println(greet(None))
}
}Option a partir de valores anulables
Si debe trabajar con código que devuelve null, envuélvalo con Option(...). Convierte null en None y cualquier valor real en Some.
object Main {
def main(args: Array[String]): Unit = {
val maybe = Option("data")
val nothing = Option(null)
println(maybe)
println(nothing)
}
}La biblioteca estándar devuelve Option
Muchos métodos integrados ya devuelven Option en lugar de arriesgarse a producir errores. Por ejemplo, List.headOption gestiona las listas vacías de forma segura.
object Main {
def main(args: Array[String]): Unit = {
val xs = List(1, 2, 3)
val empty = List.empty[Int]
println(xs.headOption)
println(empty.headOption)
}
}¿Por qué usar Option en lugar de null?
Option es mejor que null porque:
- Hace visibles los valores ausentes en el tipo
- Obliga a quien llama a gestionar el caso de ausencia
- Elimina las excepciones NullPointerException
- Se combina con map, flatMap y las for-comprehensions
Unirlo todo
Una pequeña búsqueda que devuelve Option y que después se gestiona de forma segura mediante pattern matching.
object Main {
val prices = Map("apple" -> 3, "pear" -> 5)
def priceOf(item: String): Option[Int] = prices.get(item)
def main(args: Array[String]): Unit = {
priceOf("apple") match {
case Some(p) => println(s"costs $p")
case None => println("not for sale")
}
println(priceOf("banana"))
}
}Comprobación rápida
Compruebe su comprensión de Option.
Resumen
Ha aprendido a evitar null con Option:
Option[A]esSome(value)oNone- Hace explícita en el tipo la posible ausencia
- Compruebe con
isDefined/isEmptyo mediante pattern matching - Use
Option(x)para envolver valores anulables - Métodos de biblioteca como
headOptionyMap.getdevuelven Option
Preguntas frecuentes
¿La lección «Cómo evitar null» es gratis?
Sí — el texto completo de «Cómo evitar null» 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 «Cómo evitar null»?
Conceptos básicos de Option 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 1 de 4.
¿Cuánto tiempo toma la lección «Cómo evitar null»?
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.