0Pricing
Scala for Backend Engineering & Functional Programming · Lección

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 valor
  • None cuando 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] es Some(value) o None
  • Hace explícita en el tipo la posible ausencia
  • Compruebe con isDefined/isEmpty o mediante pattern matching
  • Use Option(x) para envolver valores anulables
  • Métodos de biblioteca como headOption y Map.get devuelven 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.

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