#Kata Option-Some-None en Scala.

En este post te voy a explicar como funcionan las monads: Option, Some y None en Scala.

Primeros pasos.

Si no sabes que es una monad, podemos definirlo como un envoltorio para un objeto. No tratas directamente con el objeto, pero puedes acceder a el, sí quieres.

Option, Some y None sirven para tratar con valores vacíos problemáticos como los objetos nulleables. En Scala, las excepciones se consideran mutaciones o comportamientos no esperados. Una excepción de tipo NullPointerException rompería el flujo.

En el paradigma imperativo, los nullchecks o las excepciones de referencias nulas no están tan mal vistas. Pero, cuando tienes demasiados objetos que pueden tener un valor o no tenerlo, el manejo de la lógica se vuelve complicado. Te va a dar más claridad trabajar con Option que con objetos que pueden ser nulos o no serlo.

Option, Some y None.

Tienes 3 objetos, en realidad solo usas dos. La clase base es Option, de esta heredan Some y None. Cuando trabajas con clases de tipo Option puedes tener dos posibles estados Some y None. El primero representa un valor, el segundo representa la ausencia de valor.

Supón que tienes un formulario  con un checkbox, el usuario puede activarlo o desactivarlo o jamás aplicar una operación. Aquí tienes 3 posibles estados  true, false o empty. Scala no soporta nullables, no puedes asignarlo como null, pero si puedes crear un option.

 

Soporte de Option en Scala.

La mayoría de componentes nativos de Scala saben trabajar con Option. No tienes que hacer filtros o agregar lógica adicional. Eso es una ventaja comparada con los montones de nullchecks que se hacen de modo imperativo.

En el siguiente ejemplo, tienes una función que recibe un string y retorna la conversión de un número. En vez de retornar el objeto se envuelve en un Option, después usamos map y flatMap. Con flatMap todos los resultados que son None se ignoran.

 

Gustavo Sánchez