Clases de datos de Kotlin

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

Deja una respuesta

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