Option y Nullable: cuándo utilizar cada uno
Compare el tipo Option de Arrow con los tipos anulables de Kotlin y elija el adecuado
Option y Nullable: cuándo utilizar cada uno es una lección gratuita de Kotlin Academy 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 Kotlin Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Kotlin Academy incluye 4 lecciones en total.
Dos formas de representar la ausencia
Tipos anulables de Kotlin
El tipo T? de Kotlin es la opción idiomática para representar la ausencia en la mayoría del código Kotlin. El compilador obliga a comprobar los valores nulos, el operador de llamada segura ?. encadena las llamadas correctamente y ?: "default" proporciona valores alternativos de forma concisa:
val name: String? = findUser(id)?.name
val display = name ?: "Anonymous"Option<A> de Arrow
Option envuelve el concepto de anulabilidad en un tipo algebraico adecuado con map, flatMap, filter, fold y otros métodos. Se integra de forma natural con el estilo de canalización funcional de Arrow:
import arrow.core.Option
import arrow.core.Some
import arrow.core.None
import arrow.core.toOption
val opt: Option<String> = "hello".toOption() // Some("hello")
val absent: Option<String> = NoneConversión entre Option y tipos anulables
Puede convertirlos libremente: value?.toOption() envuelve un valor anulable en Option; option.getOrNull() extrae el valor o null; option.getOrElse { default } proporciona un valor alternativo:
val opt: Option<String> = nullableString.toOption()
val back: String? = opt.getOrNull()map y flatMap sobre Option
map { } transforma un valor Some (devuelve None sin cambios). flatMap { } encadena operaciones que devuelven Option:
val length: Option<Int> = "hello".toOption().map { it.length } // Some(5)
val noneLength: Option<Int> = (null as String?).toOption().map { it.length } // Nonefilter sobre Option
filter { predicate } convierte un Some en None si el predicado es falso:
val positiveAge: Option<Int> = 25.toOption().filter { it > 0 } // Some(25)
val rejectedAge: Option<Int> = (-1).toOption().filter { it > 0 } // Nonefold: consumir Option
fold(ifEmpty, ifSome) gestiona ambos casos en una sola expresión, sin coincidencia de patrones:
val result: String = someOption.fold(
ifEmpty = { "Nothing here" },
ifSome = { value -> "Got: $value" }
)Cuándo preferir el tipo anulable T?
Prefiera el tipo anulable de Kotlin (T?) cuando:
- Escriba código Kotlin idiomático que otras personas vayan a leer
- Necesite cadenas de operadores seguras frente a valores nulos (
?.,?:) - El tipo se use en API que no empleen Arrow
- El rendimiento sea crítico (sin sobrecoste de boxing)
Cuándo preferir Option<A>
Prefiera Option cuando:
- Ya esté usando la canalización funcional de Arrow (
map,flatMap) - Quiera componer valores opcionales con
EitheroRaise - Quiera hacer explícita la ausencia en un contexto funcional genérico
- Esté creando una biblioteca cuyos usuarios podrían no utilizar Kotlin
Option dentro de either { }
Dentro del bloque either { } de Arrow, puede llamar a .bind() sobre un Option después de convertirlo primero en Either:
fun findUserOpt(id: Long): Option<User> = TODO()
fun getUser(id: Long): Either<UserError, User> = either {
findUserOpt(id)
.toEither { UserError.NotFound }
.bind()
}El antipatrón de Option
No use Option en todas partes solo porque existe. En Kotlin, String? es más claro que Option en la mayoría del código de aplicaciones. Reserve Option para los casos en los que sus operadores funcionales aporten un valor real.
Comprobación rápida
¿Qué devuelve None.map { it.length } en el Option de Arrow?
Repaso: Option y los tipos anulables
Puntos clave:
- Kotlin
T?: idiomático para la mayoría del código; validado por el compilador; usa?.y?: - Arrow
Option: tipo algebraico con operadores funcionales (map,flatMap,fold,filter) - Convierta valores con
.toOption()y.getOrNull() - Prefiera
T?en el código Kotlin idiomático; prefieraOptional componer pipelines funcionales con Arrow
Aprende Kotlin 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
- 51
- Lecciones
- 203
Preguntas frecuentes
¿La lección «Option y Nullable: cuándo utilizar cada uno» es gratis?
Sí — el texto completo de «Option y Nullable: cuándo utilizar cada uno» 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 Kotlin Academy, actualiza a CoddyKit PRO. El curso de Kotlin Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Option y Nullable: cuándo utilizar cada uno»?
Compare el tipo Option de Arrow con los tipos anulables de Kotlin y elija el adecuado Practicas Kotlin Academy 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 Kotlin Academy?
No se requiere experiencia previa. Kotlin Academy 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 «Option y Nullable: cuándo utilizar cada uno»?
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 Kotlin Academy?
Sí. Cada lección de Kotlin Academy 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
- Either : gestión de errores tipada sin excepciones
- DSL Raise de Arrow: composición de errores tipados
- Option y Nullable: cuándo utilizar cada uno
- Modelado funcional de dominios con los tipos principales de Arrow