Kotlin: La clase de datos mágicos. El objetivo de este trabajo no es apuntar a … | lähde: IMStudio | Octubre de 2020

El objetivo de este artículo no es señalar algunas deficiencias importantes en el diseño de clases de datos de Kotlin y mostrarle cómo obtenerlas. De hecho, es al revés. El contenido de este artículo está claramente documentado en el documento. Documentos de Kotlin. Solo estoy aquí para enfatizar esta información a cualquiera que no haya notado exactamente cómo funcionan sus clases de datos.

Aquí hay una clase modelo muy simple sin los data palabra clave:

su clase es de hecho unlun equivalente preparado de lo que muchos pueden llamar POJO. En las condiciones de Java, tiene dos campos, captadores y definidores según sea necesario, y un constructor que toma dos parámetros y establece los valores del campo.

A menudo creamos clases cuyo objetivo principal es almacenar datos. En tal clase, algunas funciones estándar y funciones operativas a menudo se derivan mecánicamente de los datos. En Kotlin se llama clase de datos y está etiquetado como data:

Para garantizar la coherencia y el comportamiento significativo del código generado, las clases de datos deben cumplir los siguientes requisitos:

  • El constructor principal debe tener al menos un parámetro;
  • Todos los parámetros del constructor principal deben marcarse como val o var;
  • Las clases de datos no pueden ser abstractas, abiertas, selladas o internas;

Todo esto nos da varios otros métodos generados, que en términos de código Java se verían así (simplificado):

Los primeros tres métodos son bastante obvios, son solo implementaciones razonables Any (o Objectsi quieres) métodos.

Tenga en cuenta que se genera equals y hashCode Los métodos de clase de datos siempre tendrán en cuenta todas las propiedades que están en el constructor principal, y solo esas. Si necesita otros comportamientos, deberá escribir o generar estos métodos usted mismo. Este puede ser el caso cuando se sienta mejor sin una clase de datos.

Sin embargo, la ventaja es que estos métodos se generan en tiempo de compilación, lo que significa que siempre estarán actualizados y usarán todas las propiedades del constructor principal. Si realmente tenía estos métodos en su base de código, ¡deberá mantenerlos usted mismo al agregar, eliminar o cambiar propiedades!

Los métodos restantes que obtiene de la clase de datos son específicos de Kotlin y, en principio, nunca deberían usarse desde el código Java.

los componentN Los métodos de estilo son una convención que debe promoverse. declaración destructiva. En el caso de esta clase, nos permite dividir nuestra clase en variables de la siguiente manera:

los copy el método nos permite crear una nueva instancia de nuestra clase de datos, que por defecto contiene exactamente los mismos valores para cada propiedad:

También tiene un parámetro opcional (uno con un valor predeterminado) para cada propiedad de la clase de datos. Puede cambiar libremente uno por uno como desee, esto generalmente se hace usando un parámetro con nombre:

Como puede ver, todos los parámetros que no aparecen en la lista se conservarán de la instancia copiada.

Tenga en cuenta que el compilador solo usa propiedades definidas dentro del constructor principal para funciones generadas automáticamente. Para excluir una propiedad de las implementaciones generadas, declararla dentro del cuerpo de la clase:

¿Cuáles son los beneficios de elegir uno u otro? (La lista de desventajas es básicamente la misma, todo lo contrario).

Ventajas de las clases regulares:

  • Probablemente suficiente para muchos usos.
  • Métodos menos generados: en Android, por ejemplo, es posible que aún le importe.
  • No limita la herencia: las clases de datos son un poco dolorosas en las jerarquías.
  • Puede tener parámetros de constructor que no sean propiedades: las clases de datos requieren que todos los parámetros de constructor primarios sean propiedades.

Beneficios para las clases de datos:

  • Implementaciones predeterminadas razonables Any métodos: facilita la depuración, la comparación y el uso como claves en Maps.
  • Ayudas a la reestructuración.
  • copy método: especialmente útil para clases inmutables.

A veces es suficiente crear clases para almacenar datos, como estructuras en el lenguaje de programación C. Kotlin clases de datos le ofrece una forma de crear estructuras de datos que tienen funciones generadas automáticamente que las hacen muy útiles. Si está familiarizado con Scala clases de casos, las clases de datos son casi exactamente las mismas.

Las clases de datos generalmente están diseñadas para su uso en un entorno de programación funcional (FP), pero los desarrolladores de PPE también pueden usarlas.

  • En FP, crea clases de solo datos, como estructuras en C.
  • Kotlin clases de datos son útiles para este propósito
  • El compilador genera automáticamente las siguientes funciones para clases de datos:
  • equals() y hashCode() métodos
  • útil toString() método
  • Y copy() función que es útil en actualizar al copiar guión
  • Las funciones «componentN» están diseñadas para permitirle destruir una instancia en sus campos de constructor
  • Las clases de datos son como las clases regulares de Kotlin, pero debido a que están diseñadas para almacenar datos, el constructor principal debe tener al menos un parámetro

Si bien las clases de datos pueden ser útiles para OOP, están destinadas principalmente al paradigma de FP:

  • Los desarrolladores de FP crean clases de datos con todos val parámetros del constructor
  • Todas las instancias de las clases de datos también son val

En FP, todas las variables y todas las colecciones son inmutables, por lo que las funciones de clases de datos son especialmente útiles cuando todo es inmutable, la única forma de actualizar las variables es actualizarlas cuando haga una copia de ellas.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *