以前の記事ではすでにクラスを見てきましたが、データクラスはコードを簡素化するのに少し進んでいます。
データクラスとは何ですか?
データクラスは、状態のみを含み、操作を実行しないクラスです。
通常のクラスの代わりにデータクラスを使用する利点は、Kotlinが膨大な量の自己生成コードを提供することです。
特に、これはすべて無料で提供されます:
- コンストラクタで宣言されたプロパティ:これは技術的にはデータクラスに排他的ではありませんが、コンストラクタに加えて、getterとsetterのすべての定型
-
equals()
/hashCode()
componentX()
と呼ばれる一連の関数は、後で見るクールなことを行うことができます。copy()
メソッド、不変オブジェクトを使用するときに非常に便利です。
¿Javaコードはデータクラスとどのように比較されますか?
ここに素晴らしさが来る。 このコードのほとんどはIDEによって生成されますが、Javaではデータクラスを実装するためにこれが必要です:
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 + ''' + '}'; }}
そして、私たちはまだKotlinがこの行で提供するのと同じ量の機能を達成することにはほど遠いでしょう:
data class Person(var name: String, var surname: String, var id: String)
これは、私たちを救う無駄なコードの量で、Kotlinの可能性を本当に見ているところです。
クラス
それがcomponentX
関数の使用です。 それらのおかげで、このように変数でデータクラスを分解することができます:
Kotlinを学びたいですか?
15分であなたの最初のプロジェクトを作成するために私の無料ガイドをチェック!
val person = Person("x", "y", "z")val (n, s, i) = person
これにより、ループ内でマップペアを分解するようなことができます:
val map = mapOf(1 to "a", 2 to "b")for ((key, value) in map) { toast("key: $key, value: $value")}
オブジェクトコピー
前に話したように、すべての可能な状況で不変性を私たちには良い習慣です。 前のクラスを不変として実装すると:
data class Person(val name: String, val surname: String, val id: String)
姓を変更したい場合は、できません。
不変性を扱うとき、オブジェクトの状態を変更するには、新しい値でコピーする必要があります。 そして、それはcopy
関数の使用です:
val person = Person("John", "Smith", "123abc")val person2 = person.copy(surname="Rogers")
copy
関数は、変更する必要がある値と同じ数のパラメータを受け取ることができます。 ご覧のように、関数パラメータに名前を付けることができるので、変更するパラメータを指定できます。
結論
データクラスは、Javaが生成するように強制する多くの定型文を保存するので、理解しやすく保守しやすいコードになります。
あなたが見たものが好きなら、私はあなたが最初からKotlinで独自のAndroidアプリを作成する方法について学ぶために必要なすべてを教えてくれます私の