Nota de traducción: Es dificil encontrar en nuestro idioma una palabra que se relacione directamente con el significado de match
en inglés. Podemos entender a match
como “coincidir” o “concordar” con algo. En algunos lugares se utiliza la palabra machear
, aunque esta no existe en nuestro idioma con el sentido que se le da en este texto, sino que se utiliza como traducción de match
.
Scala tiene incorporado un mecanismo general de reconocimiento de patrones. Este permite identificar cualquier tipo de datos una política primero-encontrado. Aquí se muestra un pequeño ejemplo el cual muestra cómo coincidir un valor entero:
object MatchTest1 extends App {
def matchTest(x: Int): String = x match {
case 1 => "one"
case 2 => "two"
case _ => "many"
}
println(matchTest(3))
}
El bloque con las sentencias case
define una función la cual mapea enteros a cadenas de caracteres (strings). La palabra reservada match
provee una manera conveniente de aplicar una función (como la función anterior) a un objeto.
Aquí se muestra un ejemplo el cual coincide un valor contra un patrón de diferentes tipos:
object MatchTest2 extends App {
def matchTest(x: Any): Any = x match {
case 1 => "one"
case "two" => 2
case y: Int => "scala.Int"
}
println(matchTest("two"))
}
El primer case
coincide si x
se refiere a un valor entero 1
. El segundo case
coincide si x
es igual al string "two"
. El tercero consiste en un patrón tipado (se provee un tipo); se produce una coincidencia contra cualquier entero que se provea y además se liga la variable y
al valor pasado x
de tipo entero.
El reconocimiento de patrones en Scala es más útil para hacer coincidir tipos algebráicos expresados mediante clases case. Scala también permite la definición de patrones independientemente de las clases Case, a través del método unapply
de objetos extractores.
Contributors to this page:
Contents
- Introducción
- Basics
- Tipos Unificados
- Clases
- Valores de parámetros por defecto
- Parámetros nombrados
- Traits
- Tuples
- Composición de clases mixin
- Funciones de orden superior
- Funciones Anidadas
- Currying
- Clases Case
- Reconocimiento de patrones
- Singleton Objects
- Patrones basados en expresiones regulares
- Objetos Extractores
- For Comprehensions
- Clases genéricas
- Varianzas
- Límite de tipado superior
- Límite de tipado inferior
- Clases Internas
- Tipos Abstractos
- Tipos Compuestos
- Autorefrencias explicitamente tipadas
- Parámetros implícitos
- Implicit Conversions
- Métodos polimórficos
- Inferencia de tipos Local
- Operadores
- By-name Parameters
- Anotaciones
- Packages and Imports
- Package Objects