Classi di dati in Kotlin: salva un buon gruppo di righe di codice (KAD 10)

Abbiamo già visto le classi in un articolo precedente, ma le classi di dati vanno un po ‘ oltre nell’aiutarci a semplificare il nostro codice.

Cosa sono le classi di dati?

Una classe di dati è una classe che contiene solo lo stato e non esegue alcuna operazione.

Il vantaggio di utilizzare classi di dati invece di classi regolari è che Kotlin ci dà un’immensa quantità di codice auto-generato.

In particolare, ci dà tutto questo gratuitamente:

  • Le proprietà dichiarate nel costruttore: questo tecnicamente non è esclusivo di una classe di dati, ma evita tutto il boilerplate di getter e setter, oltre al costruttore.
  • equals() / hashCode()
  • Un insieme di funzioni chiamate componentX(), che ci permettono di fare una cosa interessante che vedremo più avanti.
  • Un metodo copy(), molto utile quando usiamo oggetti immutabili.

¿Come viene confrontato il codice Java con una classe di dati?

Ecco che arriva la suggestione. Anche se la quasi totalità di questo codice è generato dall’IDE, in Java che abbiamo bisogno di questo per implementare una classe di dati:

public class Person { private String name; private String surname; private String id; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSurname() { return surname; } public void setSurname(String surname) { this.surname = surname; } public String getId() { return id; } public void setId(String id) { this.id = id; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Person person = (Person) o; if (name != null ? !name.equals(person.name) : person.name != null) return false; if (surname != null ? !surname.equals(person.surname) : person.surname != null) return false; return id != null ? id.equals(person.id) : person.id == null; } @Override public int hashCode() { int result = name != null ? name.hashCode() : 0; result = 31 * result + (surname != null ? surname.hashCode() : 0); result = 31 * result + (id != null ? id.hashCode() : 0); return result; } @Override public String toString() { return "Person{" + "name='" + name + ''' + ", surname='" + surname + ''' + ", + id + ''' + '}'; }}

E saremmo ancora lontani dal raggiungere la stessa quantità di funzionalità che Kotlin fornisce con questa linea:

data class Person(var name: String, var surname: String, var id: String)

Questo è dove abbiamo davvero vedere Kotlin del potenziale, la quantità di codice inutile che ci salva.

Classi destrutturazione

Questo è l’uso di componentX funzioni. Grazie a loro, puoi scomporre una classe di dati in variabili in questo modo:

Vuoi imparare Kotlin?

Controlla la mia guida gratuita per creare il tuo primo progetto in 15 minuti!

val person = Person("x", "y", "z")val (n, s, i) = person

Grazie a questo, si possono fare cose come la decomposizione mappa coppie all’interno di un ciclo:

val map = mapOf(1 to "a", 2 to "b")for ((key, value) in map) { toast("key: $key, value: $value")}

gli Oggetti di copia

Come abbiamo parlato prima, è una buona pratica per noi immutabilità in tutte le situazioni possibili. Se implementiamo la classe precedente come immutabile:

data class Person(val name: String, val surname: String, val id: String)

Se ora vogliamo cambiare il cognome, non saremo in grado.

Quando si lavora con immutabilità, per modificare lo stato di un oggetto è necessario copiarlo con il nuovo valore. E questo è l’uso della funzione copy :

val person = Person("John", "Smith", "123abc")val person2 = person.copy(surname="Rogers")

La funzione copy può ricevere tanti parametri quanti sono i valori da modificare. Come puoi vedere, i parametri di funzione possono essere nominati, quindi puoi specificare quali vuoi modificare.

Conclusione

le classi di dati risparmiano un sacco di boilerplate che Java ci costringe a generare, quindi si finisce con un codice che è più facile da capire e da mantenere.

Se ti piace quello che hai visto, vi incoraggio a firmare per la mia formazione gratuita, dove ti dirò tutto il necessario per imparare su come creare le proprie applicazioni Android in Kotlin da zero.

Come il caricamento…

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.