A menudo creamos clases para contener algunos datos. En tales clases, algunas funciones estándar a menudo se derivan de los datos. En Kotlin, este tipo de clase se conoce como data class y se marca como data .
Ejemplo de un dato:
data class Student(val name: String, val roll_no: Int)
El compilador deriva automáticamente las siguientes funciones:
- es igual()
- código hash()
- Enstringr()
- Copiar()
Reglas para crear clases de datos –
Las clases de datos deben cumplir los siguientes requisitos para garantizar la coherencia:
- 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.
- Las clases de datos solo pueden implementar interfaces.
Enstringr()
Esta función devuelve una string de todos los parámetros definidos en la clase de datos.
Ejemplo:
fun main(args: Array<String>) { //declaring a data class data class man(val roll: Int,val name: String,val height:Int) //declaring a variable of the above data class //and initializing values to all parameters val man1=man(1,"man",50) //printing all the details of the data class println(man1.toString()); }
Producción:
man(roll=1, name=man, height=50)
Nota:
el compilador solo usa las propiedades definidas dentro del constructor principal para las funciones generadas automáticamente.
Excluye las propiedades que se declaran en el cuerpo de la clase.
Ejemplo:
fun main(args: Array<String>) { //declaring a data class data class man(val name: String) { //property declared in class body var height: Int = 0; } //declaring a variable of the above data class and //initializing values to all parameters val man1=man("manish") //class body properties must be assigned uniquely man1.height = 70 //this method prints the details of class that //are declared in primary constructor println(man1.toString()); //printing the height of man1 println(man1.height); }
Producción:
man(name=manish) 70
Aquí la función toString() no utiliza la altura .
Copiar()
A veces necesitamos copiar un objeto, con algún cambio en algunas de sus propiedades manteniendo todas las demás sin cambios.
En este caso se utiliza la función copiar().
Propiedades de copiar()
- Copia todos los argumentos o miembros definidos en el constructor principal
- Dos objetos pueden tener los mismos valores de parámetros primarios y diferentes valores de cuerpo de clase si se definen
Declaración de copia()
fun copy(name: String = this.x, age: Int = this.y) = user(x, y)
donde usuario es una clase de datos: usuario(String, Int) .
Ejemplo
fun main(args: Array<String>) { //declaring a data class data class man(val name: String, val age: Int) { //property declared in class body var height: Int = 0; } val man1 = man("manish",18) //copying details of man1 with change in name of man val man2 = man1.copy(name="rahul") //copying all details of man1 to man3 val man3 = man1.copy(); //declaring heights of individual men man1.height=100 man2.height=90 man3.height=110 //man1 & man3 have different class body values, //but same parameter values //printing info all 3 men println("${man1} has ${man1.height} cm height") println("${man2} has ${man2.height} cm height") println("${man3} has ${man3.height} cm height") }
Producción:
man(name=manish, age=18) has 100 cm height man(name=rahul, age=18) has 90 cm height man(name=manish, age=18) has 110 cm height
hashCode() y es igual a()
- La función hashCode() devuelve un valor de código hash para el objeto.
- El método equals() devuelve verdadero si dos objetos tienen el mismo contenido y funciona de manera similar a «==», pero funciona de manera diferente para los valores flotantes y dobles .
Declaración de hashCode() :
open fun hashCode(): Int
Propiedades de hashCode()
- Dos códigos hash declarados dos veces en el mismo objeto serán iguales.
- Si dos objetos son iguales de acuerdo con el método equals(), entonces los códigos hash
devueltos también serán los mismos
fun main(args: Array<String>) { //declaring a data class data class man(val name: String, val age: Int) val man1 = man("manish",18) val man2 = man1.copy(name="rahul") val man3 = man1.copy(); val hash1=man1.hashCode(); val hash2=man2.hashCode(); val hash3=man3.hashCode(); println(hash1) println(hash2) println(hash3) //checking equality of these hash codes println("hash1 == hash 2 ${hash1.equals(hash2)}") println("hash2 == hash 3 ${hash2.equals(hash3)}") println("hash1 == hash 3 ${hash1.equals(hash3)}") }
Producción:
835510190 -938448478 835510190 hash1 == hash 2 false hash2 == hash 3 false hash1 == hash 3 true
Explicación:
man1 y man2 tienen el mismo contenido de objeto, por lo que son iguales, por lo que tienen los mismos valores de código hash.
Publicación traducida automáticamente
Artículo escrito por ManishKhetan y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA