Pattern matching es una característica poderosa de Scala que permite hacer coincidir valores y expresiones con patrones específicos. Se puede usar para desestructurar valores complejos, como tuplas y listas, y para manejar diferentes casos de entrada en una función. En este artículo, exploraremos algunos ejemplos de cómo utilizar el pattern matching en Scala.
El pattern matching en Scala se realiza con la sintaxis match
, que se parece a una declaración switch
en otros lenguajes de programación. La sintaxis básica es la siguiente:
val x = 1
x match {
case 1 => println("x es uno")
case 2 => println("x es dos")
case _ => println("x es otro número")
}
En este ejemplo, el valor de la variable x
se compara con cada uno de los patrones case
definidos en la estructura match
. Si x
coincide con el patrón 1
, se imprimirá "x es uno"
. Si x
coincide con el patrón 2
, se imprimirá "x es dos"
. Y si x
no coincide con ningún patrón, se imprimirá "x es otro número"
.
Además de los valores literales, también podemos utilizar patrones más complejos para desestructurar valores complejos, como tuplas y listas. Por ejemplo:
val t = (1, "hola")
t match {
case (1, s) => println(s"El segundo valor de la tupla es $s")
case (_, s) => println(s"El segundo valor de la tupla es $s, pero el primer valor no es 1")
}
En este ejemplo, el valor de la tupla t
se compara con cada uno de los patrones case
. Si el primer valor de la tupla es 1
, se imprimirá el segundo valor de la tupla. De lo contrario, se imprimirá el segundo valor de la tupla y un mensaje de advertencia.
Otro uso común del pattern matching en Scala es en la definición de funciones que manejan diferentes casos de entrada de manera diferente. Por ejemplo, podemos definir una función que calcule el área de diferentes formas geométricas:
sealed trait Forma
case class Circulo(radio: Double) extends Forma
case class Rectangulo(ancho: Double, altura: Double) extends Forma
case class Cuadrado(lado: Double) extends Forma
def area(forma: Forma): Double = forma match {
case Circulo(r) => math.Pi * r * r
case Rectangulo(a, h) => a * h
case Cuadrado(l) => l * l
}
En este ejemplo, definimos tres clases de caso (Circulo
, Rectangulo
y Cuadrado
) que extienden una clase sellada (Forma
). Luego, definimos una función area
que toma una forma como entrada y devuelve su área correspondiente utilizando el pattern matching.
En resumen, el pattern matching es una característica poderosa de Scala que permite hacer coincidir valores y expresiones con patrones específicos. Puede ser utilizado para desestructurar valores complejos y manejar diferentes casos de entrada en una función. Con una sintaxis clara y concisa, el pattern matching es una herramienta fundamental en el arsenal de cualquier desarrollador de Scala.