¿Por qué no convertiría cada class de Kotlin eligable en una class de datos?

Por supuesto, excluyo cualquier motivo que implique la violación de las reglas para lo que puede ser una class de datos. Entonces, si sabes que no necesitarás henetworkingar de él, por ejemplo (aunque entiendo que la regla se va en Kotlin 1.1).

  1. ¿Hay alguna desventaja para hacer que una class sea una class de datos?
  2. ¿Por qué no todas las classs elegibles brindan la funcionalidad de una class de datos siempre que sigan siendo elegibles? Todo esto debe ser detectable por el comstackdor sin necesidad de una palabra key especial. Por supuesto, la respuesta a esto podría ser obvia dependiendo de la respuesta a la pregunta 1.
  3. ¿Hay alguna razón para que no marque todas mis classs elegibles como classs de datos?

data modificador de data hace que Kotlin genere methods comunes como toString , hashCode , equals para los escenarios más comunes (% 80) basados ​​en el constructor primario.

Esto muestra 3 razones por las cuales solo algunas classs deberían ser data :

  1. La mayoría de las classs que no son de datos tienen una combinación de properties definidas en el constructor primario y en el cuerpo de la class. Además, el constructor principal a menudo tiene parameters que no son campos (pero ayudan a inicializar campos más complejos en el cuerpo). En otras palabras, los data tienen requisitos muy restrictivos que rara vez se cumplen por las classs regulares.

  2. Además del punto 1, hacer una class de data puede dañar su extensibilidad. Incluso si el layout de la class en cuestión se ajusta a las reglas de data classs de data , más tarde alguien puede desear agregar otra propiedad en el cuerpo de la class. En ese caso, tendrá que anular manualmente hashCode porque puede usarse en alguna parte.

  3. Marcar los data una class envía un post a quien lee el código que tiene la intención de utilizar esta class como una carrera de datos. Marcar otras classs será engañoso.

por eso, uno de los stackres fundamentales de la progtwigción de OO: encapsulación. por layout, limitamos deliberadamente las forms en que otro código puede interactuar con los modules. esto nos da capacidad de mantenimiento (refactorización más poderosa) y readablidad