Classe de dados Kotlin

Neste artigo, você aprenderá a criar classes de dados em Kotlin. Você também aprenderá sobre os requisitos que a classe de dados deve cumprir e suas funcionalidades padrão.

Pode surgir uma situação em que você precise criar uma classe apenas para armazenar dados. Nesses casos, você pode marcar a classe datapara criar uma classe de dados. Por exemplo,

 classe de dados Person (nome val: String, var age: Int)

Para esta classe, o compilador gera automaticamente:

  • copy()função, equals()e hashCode()par, e toString()forma do construtor primário
  • componentN() funções

Antes de falar sobre esses recursos em detalhes, vamos falar sobre os requisitos que uma classe de dados deve cumprir.

Requisitos de classe de dados Kotlin

Aqui estão os requisitos:

  • O construtor primário deve ter pelo menos um parâmetro.
  • Os parâmetros do construtor primário devem ser marcados como val(somente leitura) ou var(leitura-gravação).
  • A classe não pode ser aberta, abstrata, interna ou lacrada.
  • A classe pode estender outras classes ou implementar interfaces. Se você estiver usando a versão Kotlin anterior à 1.1, a classe só pode implementar interfaces.

Exemplo: classe de dados Kotlin

 data class User(val name: String, val age: Int) fun main(args: Array) ( val jack = User("jack", 29) println("name = $(jack.name)") println("age = $(jack.age)") )

Quando você executa o programa, a saída será:

 nome = idade do macaco = 29

Quando você declarar uma classe de dados, o compilador gera automaticamente várias funções, tais como toString(), equals(), hashcode()etc nos bastidores. Isso ajuda a manter o código conciso. Se você tivesse usado Java, precisaria escrever muito código clichê.

Vamos usar estas funções:

Copiando

Para uma classe de dados, você pode criar uma cópia de um objeto com algumas de suas propriedades diferentes usando copy()função. Funciona assim:

 data class User(val name: String, val age: Int) fun main(args: Array) ( val u1 = User("John", 29) // using copy function to create an object val u2 = u1.copy(name = "Randy") println("u1: name = $(u1.name), name = $(u1.age)") println("u2: name = $(u2.name), name = $(u2.age)") )

Quando você executa o programa, a saída será:

 u1: nome = John, nome = 29 u2: nome = Randy, nome = 29

método toString ()

A função toString () retorna uma representação de string do objeto.

 data class User(val name: String, val age: Int) fun main(args: Array) ( val u1 = User("John", 29) println(u1.toString()) )

Quando você executa o programa, a saída será:

 Usuário (nome = John, idade = 29)

hashCode () e equals ()

O hasCode()método retorna o código hash para o objeto. Se dois objetos forem iguais, hashCode()produz o mesmo resultado inteiro. Leitura recomendada: hashCode ()

Os equals()retornos truese dois objetos forem iguais (tem o mesmo hashCode()). Se os objetos não forem iguais, equals()retorna false. Leitura recomendada: igual ()

 data class User(val name: String, val age: Int) fun main(args: Array) ( val u1 = User("John", 29) val u2 = u1.copy() val u3 = u1.copy(name = "Amanda") println("u1 hashcode = $(u1.hashCode())") println("u2 hashcode = $(u2.hashCode())") println("u3 hashcode = $(u3.hashCode())") if (u1.equals(u2) == true) println("u1 is equal to u2.") else println("u1 is not equal to u2.") if (u1.equals(u3) == true) println("u1 is equal to u3.") else println("u1 is not equal to u3.") )

Quando você executa o programa, a saída será:

u1 hashcode = 71750738 u2 hashcode = 71750738 u3 hashcode = 771732263 u1 é igual a u2. u1 não é igual a u3.

Declarações de Destruição

Você pode desestruturar um objeto em várias variáveis ​​usando a declaração de destruição. Por exemplo:

 classe de dados Usuário (nome do val: String, idade do val: Int, gênero do val: String) fun main(args: Array) ( val u1 = User("John", 29, "Male") val (name, age, gender) = u1 println("name = $name") println("age = $age") println("gender = $gender") )

Quando você executa o programa, a saída será:

 nome = John idade = 29 sexo = Masculino

Isso foi possível porque o compilador gera componentN()funções todas as propriedades de uma classe de dados. Por exemplo:

 data class User(val name: String, val age: Int, val gender: String) fun main(args: Array) ( val u1 = User("John", 29, "Male") println(u1.component1()) // John println(u1.component2()) // 29 println(u1.component3()) // "Male" )

Quando você executa o programa, a saída será:

 John 29 Masculino

Artigos interessantes...