"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Explorando los patrones de registro de Java y la coincidencia de patrones

Explorando los patrones de registro de Java y la coincidencia de patrones

Publicado el 2024-08-23
Navegar:100

Exploring Java Record Patterns and Pattern Matching

Los patrones de registro de Java se introdujeron en Java 16 como parte del Proyecto Amber y se mejoraron en Java 21 con la adición de deconstructores y coincidencia de patrones. Esta característica permite una forma más concisa y flexible de manejar datos en aplicaciones Java. En este tutorial, cubriremos el concepto de patrones de registro, cómo ayudan en la comparación de patrones y varios ejemplos de codificación.

1. Resumen rápido de registros Java
Antes de profundizar en los patrones de registros, hagamos un rápido resumen de los registros de Java. Los registros se introdujeron en Java 14 como un nuevo tipo de clase diseñada específicamente para contener datos inmutables. Eliminan la necesidad de escribir código repetitivo al proporcionar una sintaxis más concisa para definir clases con datos. En el siguiente ejemplo, definimos un registro llamado "Persona" con tres campos: nombre, apellido y edad.

recordar Persona(String nombre, String apellido, int edad) {}

Los registros, al ser inmutables, restringen ciertas características:

  • Todos los campos son finales
  • La clase es implícitamente final
  • La declaración de campos de instancia está prohibida

Los registros generan automáticamente un constructor y métodos getter para cada campo, lo que los hace más adecuados para soportes de datos que las clases tradicionales.

2. ¿Qué son los patrones de grabación?
Los patrones de registro, introducidos en Java 21, combinan el concepto de patrones con registros que permiten deconstruir y extraer valores de los registros fácilmente. Un patrón de registro consta de un tipo de clase de registro y variables de patrón opcionales a las que se les asignan valores extraídos del registro de destino solo si la prueba es exitosa.

El valor nulo no coincide con ningún patrón de registro, por lo que las variables del patrón no se inicializarán en este caso.

3. Destructores de registros
Un destructor es lo inverso de un constructor. Extrae valores de un objeto en lugar de agregarlos. En el contexto de los registros, un destructor se denomina "deconstructor". Permite descomponer los valores de los registros en sus componentes individuales. Supongamos que tenemos un registro llamado "Nombre" con los siguientes campos:

registrar Cliente(String nombre, String apellido, int edad) {}

Podemos usar un deconstructor para extraer los valores de estos campos de una instancia del registro "Cliente", como se muestra en el siguiente ejemplo:

Cliente cliente = nuevo Cliente("Jane", "Smith", 30);

if (instancia de cliente de Cliente (String firstName, String lastName, int age)) {
System.out.println("Nombre: "nombre); // Jane
System.out.println("Apellido: "apellido); // Herrero
System.out.println("Edad: "edad); // 30
}

Las estructuras de registros pueden ser útiles en situaciones en las que necesitamos almacenar y recuperar múltiples valores relacionados como un solo objeto. La función de deconstrucción de registros nos permite extraer y usar fácilmente esos valores en nuestro código.

4. Registrar patrones en declaraciones de cambio
Java 16 introdujo la coincidencia de patrones, por ejemplo de declaraciones, que se amplió aún más en Java 21 para incluir declaraciones de cambio. Permite un código más conciso y legible mientras maneja múltiples patrones.

Supongamos que tenemos un registro llamado "Cuenta" con tres subtipos: "CuentaAhorro", "CuentaTarjeta de Crédito" y "CuentaPréstamoHome". Cada subtipo tiene una forma diferente de calcular su saldo. Podemos usar el patrón de registro en una declaración de cambio para manejar estos tres casos, como se muestra a continuación:

cuenta de interfaz {}
registrar Cuenta de Ahorro (saldo doble) implementa Cuenta {}
registrar CreditCardAccount (doble límite de crédito, doble uso) implementa la cuenta {}
registrar HomeLoanAccount (doble monto total, doble monto pagado) implementa la cuenta {}

Cuenta cuenta= nueva CuentaTarjetaDeCrédito(10000, 1000);

cambiar (forma) {
caso Cuentas de Ahorro s:
System.out.println("El saldo de la cuenta es " saldo);
romper;
caso CuentaTarjetaCrédito c:
System.out.println("El saldo de crédito es: " (creditLimit-used));
romper;
caso HomeLoanAccount h:
System.out.println("Saldo " (monto total-monto pagado));
romper;
por defecto:
System.out.println("Cuenta desconocida");
}

5. Patrones anidados
Además de extraer valores de un solo registro, los patrones de registros también se pueden anidar para manejar registros más complejos. Digamos que tenemos un registro llamado "Cuenta" que tiene un campo de tipo "Cliente" y otro campo de tipo "Dirección". Podemos usar patrones de registros anidados para extraer los valores de ambos campos, como se muestra en el siguiente ejemplo:

registrar Cliente(String nombre, String apellido, int edad) {}

registrar cuenta(cliente cliente, dirección dirección) {}

Cliente cliente = nuevo Cliente("John", "Doe", 25);
Dirección dirección = nueva Dirección("123 Main St.","Ciudad", "Estado");
Cuenta cuenta = nueva Cuenta(cliente, dirección);

if (instancia de cuenta de Cuenta (Cliente (fNombre, lNombre, edad), Dirección (calle, ciudad, estado))) {
System.out.println("Nombre: " fName); // John
System.out.println("Apellido: " lNombre); // gama
System.out.println("Edad: "edad); // 25
System.out.println("Dirección: "calle", "ciudad", "estado); // 123 Main St., Ciudad, Estado
}

En este ejemplo, utilizamos dos patrones anidados para extraer los valores de los campos "Cliente" y "Dirección" del registro "Cuenta".

6. Coincidencia de componentes
Los patrones de registro permiten una mayor flexibilidad ya que las variables de patrón no tienen que coincidir con los nombres de los componentes de un registro. Siempre que sean compatibles, la coincidencia de patrones será exitosa. Por ejemplo:

registrar Cliente(String nombre, String apellido, int edad) {} ​​

registrar cuenta(cliente cliente, dirección dirección) {}

Cliente cliente = nuevo Cliente("John", "Doe", 25);

if (instancia de cliente de Cliente (var fn, var ln, var edad)) {
System.out.println("Nombre: " fn); // John
System.out.println("Apellido: " ln); // gama
System.out.println("Edad: "edad); // 25
}

// Accediendo a componentes de registros anidados
Cuenta cuenta = cuenta nueva (cliente, nueva dirección ("123 Main St", "Nueva York", "NY"));
if (cuenta instancia de Cuenta (var cliente, var dirección)) {
System.out.println("Cliente: " cliente); // Cliente[primerNombre=John, apellido=Doe, edad=25]
System.out.println("Dirección: " dirección); // Dirección[calle=123 Main St, ciudad=Nueva York, estado=NY]
}

Aquí, las variables de patrón "fn" y "ln" son diferentes de los nombres de componentes correspondientes de "fName" y "lName" en el registro "Cliente". Esto hace que los patrones de registro sean más flexibles y evita posibles conflictos con los nombres de las variables.

7. Conclusión
En conclusión, los patrones de registros de Java proporcionan una manera conveniente de deconstruir registros y extraer valores de ellos. Hacen que el código sea más conciso, limpio y legible mientras manejan la coincidencia de patrones en las declaraciones de instancia y cambio. Los patrones de registros, combinados con los destructores de registros, permiten un manejo más sólido de registros complejos. En general, esta característica mejora el uso de registros como soportes de datos y hace que la programación Java sea más agradable.

Los desarrolladores pueden descubrir más funciones de Java 21 estudiando para el examen SE 21 Developer Certified Professional con el uso de las pruebas de práctica 1Z0-830 de MyExamCloud.

Declaración de liberación Este artículo se reproduce en: https://dev.to/myexamcloud/exploring-java-record-patterns-and-pattern-matching-3g8l?1 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3