Datové třídy v Kotlinu: uložte dobrou spoustu řádků kódu (KAD 10)

třídy jsme již viděli v dřívějším článku, ale datové třídy jdou trochu dále a pomáhají nám zjednodušit náš kód.

co jsou datové třídy?

datová třída je třída, která obsahuje pouze stav a neprovádí žádnou operaci.

výhodou použití datových tříd namísto běžných tříd je to, že Kotlin nám dává obrovské množství samo-generovaného kódu.

zejména nám to vše dává zdarma:

  • vlastnosti deklarované v konstruktoru: to technicky není výlučné pro datovou třídu, ale kromě konstruktoru se vyhýbá všem kotlům getterů a setterů.
  • equals() / hashCode()
  • sada funkcí s názvem componentX(), které nám umožňují udělat skvělou věc, kterou uvidíme později.
  • a copy()metoda, velmi užitečná, když používáme neměnné objekty.

¿jak je Java kód ve srovnání s datovou třídou?

zde přichází úžasnost. Ačkoli téměř celý tento kód je generován IDE, v Javě to potřebujeme k implementaci datové třídy:

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 + ''' + '}'; }}

a stále bychom nebyli daleko od dosažení stejného množství funkcí, které Kotlin poskytuje s touto linkou:

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

tady opravdu vidíme Kotlinův potenciál, v množství zbytečného kódu, který nás zachrání.

třídy destrukce

to je použití funkcí componentX. Díky nim můžete rozložit datovou třídu v proměnných tímto způsobem:

chcete se naučit Kotlin?

podívejte se na můj bezplatný průvodce a vytvořte svůj první projekt za 15 minut!

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

díky tomu můžete dělat věci, jako je rozkládání párů map uvnitř smyčky:

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

objekty copy

jak jsme již mluvili, je to pro nás dobrá praxe neměnnost ve všech možných situacích. Pokud implementujeme předchozí třídu jako neměnnou:

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

Pokud nyní budeme chtít změnit příjmení, nebudeme moci.

když pracujete s neměnností, Chcete-li změnit stav objektu, musíte jej zkopírovat s novou hodnotou. A to je použití funkce copy :

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

funkce copy může přijímat tolik parametrů, kolik je třeba změnit. Jak vidíte, parametry funkce lze pojmenovat, takže můžete určit, které z nich chcete upravit.

závěr

datové třídy šetří spoustu kotle, které nás Java nutí generovat, takže skončíte s kódem, který je snáze pochopitelný a udržovatelný.

pokud se vám líbí to, co jste viděli, doporučuji vám, abyste se zaregistrovali na mé bezplatné školení, kde vám řeknu vše, co potřebujete, abyste se dozvěděli o tom, jak vytvořit vlastní aplikace pro Android v Kotlinu od nuly.

Jako Načítání…

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.