Coincidencia de patrones de Scala y clases de ejemplo
Para comprender la coincidencia de patrones, primero analicemos estas dos palabras y comprendamos qué es un patrón. Un esquema es una estructura de datos que describe la composición de una estructura.
Es fácil para nosotros asociar patrones con "expresiones regulares". Sí, este patrón es similar a la expresión regular en el patrón, pero tiene un rango de aplicación más amplio y puede apuntar a varios tipos de estructuras de datos. A diferencia de las expresiones regulares que solo apuntan a cadenas. Por ejemplo, la expresión regular "^A.*" es un patrón que representa una cadena que comienza con A y seguida de uno o más caracteres. List("A", _, _*) también es un patrón que representa el primer elemento; es un Patrón para "A" y una Lista seguida de uno o más elementos. Cuando cada patrón es una constante y el último patrón puede ser un comodín, el cambio al estilo Java se puede expresar naturalmente como una expresión de coincidencia. Sin embargo, hay tres diferencias a tener en cuenta:
1. El patrón comodín (_) puede coincidir con cualquier objeto y se utiliza como alternativa para la opción predeterminada de "cobertura total"
2 El modelo constante solo coincide consigo mismo. fuerte> Solo coincide consigo mismo, cualquier literal puede usarse como constante
3. El modelo de variable es similar al patrón comodín, puede coincidir con cualquier objeto. A diferencia del carácter comodín (_), Scala vincula variables a objetos coincidentes.
4. El patrón constructor proporciona una coincidencia profunda, donde si el objeto candidato es una clase de ejemplo, el patrón constructor primero verificará si el objeto es una instancia de la clase de ejemplo del objeto alternativo y luego verificará el constructor del objeto Si el parámetro coincide con un patrón adicional proporcionado.
El patrón Constructor no solo verifica la coherencia del objeto de nivel superior, sino que también verifica si el contenido del objeto coincide con el patrón interno. Dado que los patrones adicionales pueden formar patrones constructores, se pueden utilizar para inspeccionar cualquier profundidad dentro de un objeto.
5. El patrón de secuencia puede coincidir con tipos de secuencia (como Lista o Matriz) y clases de ejemplo.
6. Los patrones de tuplas pueden coincidir con tuplas
7. Los patrones de tipos se pueden utilizar como una alternativa simple a las pruebas de tipos y la conversión de tipos.
Una clase con modificador de caso se llama clase de ejemplo. Este modificador permite que el compilador de Scala agregue automáticamente algunas comodidades de sintaxis a la clase.
El costo de esta conveniencia es que hay que escribir modificadores de casos, y las clases y objetos de ejemplo se vuelven más grandes debido a los métodos adicionales y campos implícitos agregados a cada argumento del constructor.
La clase de muestra es una clase especial optimizada para la coincidencia de patrones.
A una clase cerrada no se le pueden agregar nuevas subclases excepto en el archivo en el que está definida la clase. Otro uso de la coincidencia de patrones es que cuando realiza una coincidencia de patrones utilizando una clase de ejemplo, es posible que desee asegurarse de que el compilador haya enumerado todas las opciones posibles. Para hacer esto, debe declarar la superclase genérica de la clase de ejemplo como sellada. Si utiliza una clase de ejemplo que hereda de una clase sellada para realizar coincidencias, el compilador reconocerá la combinación de patrones que falta y emitirá un mensaje de advertencia de notificación.
Por ejemplo:
Si desea que el compilador no le advierta, debe anotar la expresión del selector coincidente con @unchecked.
Así def describe(a: Amount): String = (a: @unchecked) match { .
Si una clase está cerrada, el compilador conocerá todas las subclases de la clase, y el compilador puede verificar la integridad de la declaración del patrón. Es una buena práctica hacer que todas (el mismo conjunto de) clases de ejemplo extiendan alguna clase o rasgo adjunto.
El tipo Opción en la biblioteca de clases estándar utiliza clases de ejemplo para representar tipos de valores que pueden existir o no. Puede tener la forma Algunos(valor), donde valor es el valor real, o un objeto Ninguno, que representa un valor faltante.
Ciertas operaciones estándar en clases de colección de Scala producen valores opcionales. Por ejemplo, el método get del mapa de Scala produce Algunos (valor) cuando se encuentra la clave especificada y Ninguno cuando no se encuentra la clave especificada.
Ejemplo:
La clase de ejemplo Ninguno es más explícita en su intención que la cadena vacía y más segura que usar nulo para no representar ningún valor.
La opción admite genéricos. Por ejemplo, Some(Paris) es de tipo Opción[Cadena].
La forma más común de separar valores opcionales es la coincidencia de patrones, por ejemplo:
Scala recomienda el uso de Opción para indicar que un valor es opcional. Esta forma de manejar valores opcionales tiene varias ventajas sobre Java.
Hablemos de coincidencia de patrones (1): ¿Qué es un patrón?