intive Argentina Blog

Scalando: Bitácora de unxs javerxs en Scala

¿Que es el match case?

Para aquellos profesionales que venimos del mundo Java (y de otros lenguajes también) la estructura switch es bien conocida. Esta nos permite anidar múltiples estructuras if, pero solo se puede utilizar con ordinales. Ahora bien, en nuestra experiencia con Scala nos encontramos con la estructura match case. Se trata de una suerte de switch con anabólicos, mucho más complejo y que nos otorga otras posibilidades.

¿Cómo funciona el match case?

Veamos unos ejemplos para ver de qué se trata:

En el código anterior, lo que podemos ver es un simple caso al estilo switch. Hay un case por cada opción posible y un camino para cada uno de ellos. Se evalúa el valor de x y en base al resultado se devuelve un string. En caso de que x asuma un valor que no se comprenda del 0 al 2, el case _ lo tomará. En match, el valor _ representa el default.

Sucede que el match case puede trabajar con clases. ¿Cómo? Veamos:

Podemos ver que “Notificación” es una clase abstracta, donde “Email”, “SMS” y “GrabacionPorVoz” heredan de ella. En caso de que necesitemos utilizar un match case, podría ser como en el siguiente ejemplo:

Como se puede observar, la función recibe un objeto del tipo Notificación y la evaluación que se realiza es con sus clases hijas, donde se utiliza su constructor.

Pero aquí no termina todo, los match case se pueden combinar con otro tipo de estructuras para hacerlos más específicos, por ejemplo:

Las diferencias con el switch de Java

Hasta aquí se podría pensar que un match case es igual al switch de Java pero, en realidad existen sutiles diferencias:

a. El match es una expresión, a diferencia del switch. Por esta razón, siempre devuelve un valor, al fiel estilo funcional.

b. No es necesaria la sentencia break después de cada case. Ya no tenemos que recordar agregarla.

c. Si ninguno de los case matchea, el match lanza un MatchErrorException, por lo que no hay que olvidarse el case default _

Los patterns para match case

El uso del match en Scala es conocido como match pattern. En el case podemos usar distintos patterns:

1. Constant patterns

Este caso sería el usual switch de Java:

2. Variable patterns

Este pattern nos permite usar variables en los cases:

3. Sequence patterns

Los sequence patterns permiten usar List o Array en los cases. Por ejemplo, en el siguiente ejemplo, podemos matchear por una lista de cualquier longitud que empiece con 0:

4. Tuple patterns

También podemos matchear utilizando tuplas:

5. Typed patterns

Por último, pero no por eso menos útil, también se puede matchear de acuerdo al tipo de dato:

Conclusiones

¿Por qué es beneficioso esta estructura en Scala con respecto al clásico switch?

  • No se limita a datos del tipo nativo, permitiéndonos combinaciones más complejas y específicas en nuestro código.
  • Como se permite la utilización de patrones, los datos pueden ser extraídos y reutilizados en otras estructuras.
  • También nos permite el uso de otras estructuras de comparación y repetición dentro del mismo pattern matching, como for, if, etc.
  • Los match son expresiones y no sentencias, permitiendo evaluaciones y asignar el resultado. Esto es fundamental para lo que es programación funcional.

 

Bibliografía:

https://docs.scala-lang.org/tour/pattern-matching.html

https://alvinalexander.com/scala/how-to-use-pattern-matching-scala-match-case-expressions

Alejandro Sandler

Alejandro Sandler es desarrollador en intive-FDV desde octubre de 2018. Ingeniero en Informática graduado de la Universidad de la Matanza (UNLaM), Alejandro tiene un profundo interés por el proceso de enseñanza, como alumno así como del lado de la docencia, área en la que planea incursionar en el medio plazo. Aficionado a la música, asiste a recitales con frecuencia. Además, entre sus hobbies se encuentran mirar series, viajar y leer sobre software.

Mariana Silvestro

Mariana Silvestro es desarrolladora full-stack en intive-FDV desde diciembre de 2017 y líder de la brigada Backend desde octubre de 2018. Licenciada en Informática, graduada de la Universidad Atlántida Argentina, Mariana además es Técnica Superior en Sistemas Informáticos por la Universidad Tecnológica Nacional (UTN). Integrante de la comunidad LasDeSistemas, es una gran militante del feminismo y la equidad de género dentro y fuera de la industria IT. Intensamente apasionada por la lectura y la escritura, cuenta con 4 poemas y 3 microrrelatos publicados.

3 comentarios