Scalaz II: type class básicos

En la preente entrada, Scalaz II: Básico, me centraré en las types classes de Scalaz con un funcionamiento básico; como son las type classes: Equal, Show y Enum.

Scalaz Equal

La type classes Equal define funciones para realizar comparaciones. Para utilizar el API Equal, hay que importar el API y la sintaxis de Scalaz de la siguiente forma:

 import scalaz.Equal
 import scalaz.Scalaz._

Tipos básicos

Unos ejemplos de comparaciones con tipos básicos son los siguientes:

 println(s"1 === 1=>${1 === 1}")
 println(s"1 === 'algo'=>${ 1 == "algo" }")
 println(s"1.some =/= 2.some=>${1.some =/= 2.some}")
 println(s"1 assert_=== 1=>${1 assert_=== 1}")

La salida por consola del snippet anterior es el siguiente:

1 === 1=>true
1 === 'algo'=>false
1.some =/= 2.some=>true
1 assert_=== 1=>()

Ejemplos con case class

Sea una case class para definir una entidad de negocio cualquiera y unas instancias de dicha case class definidas de la siguiente forma:

 case class LuzDeTrafico(nobre: String)
 val rojo = LuzDeTrafico("rojo")
 val amarillo = LuzDeTrafico("amarillo")
 val verde = LuzDeTrafico("verde")

Sea una referencia implícita que define una operación con el API Equal con la case class anterior:

implicit val TrafficLightEqual: Equal[LuzDeTrafico] = Equal.equal(_ == _)

Se puede definir operaciones de comparación de la siguiente forma:

 println(s"rojo === rojo?${rojo === rojo}")
 println(s"rojo === amarillo?${rojo === amarillo}")

La salida por consola del snippet anterior es el siguiente:

 rojo === rojo?true
 rojo === amarillo?false

Scalaz Show

La type classes Show permite definir estructuras de datos como String. Los siguientes ejemplos muestran las funciones del API Show:

 println(s"3.show=>${3.show}")
 println(s"3.shows=>${3.shows}")
 "Saludos a la consola".println
 println(s"Saludos a la consola con show=>${ "Saludos a la consola con show".show}")

La salida por consola del snippet anterior es el siguiente:

 3.show=>3
 3.shows=>3
 "Saludos a la consola"
 Saludos a la consola con show=>"Saludos a la consola con show"

Scalaz Enum

La type class Enum permite definir estructuras secuenciales ordenadas. Las estructuras que podemos definir son las siguientes: lista de enteros, Streams de enteros y lista de caracteres. Unos snippet de ejemplo son los siguientes:

  • Definición de un rango desde los caracteres ‘a’ hasta ‘e’
 val enum1 = 'a' to 'e'
 println(s"'a' to 'e'=>${enum1}")
 println("Impresión del rango de enum1")
 enum1.foreach(println(_))
 println

La salida por la consola es la siguiente:

 'a' to 'e'=>NumericRange a to e
 Impresión del rango de enum1
 a
 b
 c
 d
 e
  • Definición de una lista con los elementos desde el caracter ‘a’ hasta ‘e’ y una lista de enteros desde 1 hasta 20.
 val enum2 = 'a' |-> 'e'
 println(s"enum2=>${enum2}")
 val enum2_1 = 1 |-> 20
 println(s"enum2_1=>${enum2_1}")

La salida por la consola es la siguiente:

 enum2=>List(a, b, c, d, e)
 enum2_1=>List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20)
  • Definición de un Stream de enteros con los elementos comprendidos desde el valor 3 hasta 5.
 val enum3 = 3 |=> 5
 println(s"emun3=>${enum3}")
 println(s"emun3=>${enum3.headOption}")

La salida por la consola es la siguiente:

 emun3=>scalaz.EphemeralStream$$anon$5@37e547da
 emun3=>Some(3)

Para el lector interesado, las entradas que he realizado sobre Scalaz son las siguientes:

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s