データクラス
データ保持に適した簡潔なクラスを作成します。
「データクラス」はCoddyKit上の無料Android Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAndroid Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Android Academyコースには全4レッスンが含まれています。
データクラスとは
データクラスは、データを保持するために作られたクラスです。Kotlinが便利なメソッドを自動的に生成します。
classの前にdataと記述して宣言します。
データクラスの宣言
データクラスのプライマリコンストラクタには、少なくとも1つのパラメータが必要です。また、それぞれにvalまたはvarを付けます。
ここでは、名前と年齢を保持するUserを定義しています。
data class User(val name: String, val age: Int)
fun main() {
val u = User("Ada", 30)
println(u.name)
}読みやすいtoString
通常のクラスを出力すると、分かりにくいアドレスが表示されます。データクラスでは、各プロパティを示す分かりやすいtoStringが生成されます。
これにより、デバッグが大幅に簡単になります。
data class User(val name: String, val age: Int)
fun main() {
val u = User("Ada", 30)
println(u)
}equalsによる比較
データクラスは同一性ではなく内容で比較されます。同じプロパティ値を持つ2つのオブジェクトは、==で等しいと判定されます。
通常のクラスでは、異なるオブジェクトとして扱われます。
data class Point(val x: Int, val y: Int)
fun main() {
val a = Point(1, 2)
val b = Point(1, 2)
println(a == b)
}copy関数
自動生成されるcopy関数を使うと、既存のオブジェクトをもとに新しいオブジェクトを作成できます。指定したプロパティだけを変更することもできます。
元のオブジェクトは変更されません。
data class User(val name: String, val age: Int)
fun main() {
val u = User("Ada", 30)
val older = u.copy(age = 31)
println(older)
}分割代入
データクラスは分割代入に対応しており、1行でプロパティを個別の変数に展開できます。
展開される順序はコンストラクタの順序に従います。
data class User(val name: String, val age: Int)
fun main() {
val (name, age) = User("Sam", 25)
println(name + " " + age)
}デフォルト値も使用できる
通常のコンストラクタと同様に、データクラスのパラメータにもデフォルト値を設定できます。
これにより、呼び出し側で不要なフィールドを省略できます。
data class User(val name: String, val active: Boolean = true)
fun main() {
val u = User("Lee")
println(u)
}コレクション用のhashCode
データクラスはhashCodeも生成するため、SetやMapのキーとして正しく機能します。
等しいオブジェクトは同じハッシュ値を生成するため、重複が検出されます。
data class Point(val x: Int, val y: Int)
fun main() {
val set = setOf(Point(1, 1), Point(1, 1))
println(set.size)
}データクラスを使う場面
オブジェクトが複雑な振る舞いよりも、主に値を保持することを目的とする場合は、データクラスを使用します。
- APIレスポンス
- AndroidのUI状態
- データベースレコード
ロジックが多いオブジェクトには、通常のクラスのほうが適しています。
データクラスで作業を減らす
dataという1つのキーワードで、toString、equals、hashCode、copy、分割代入が利用できるようになります。
これにより、自分で記述・保守する必要のある定型コードを大幅に減らせます。
データクラスと通常のクラス
通常のクラスは同一性で比較され、メモリ参照を出力します。データクラスは内容で比較され、値を出力します。
dataキーワードによって、これらの自動生成された振る舞いがすべて利用可能になります。
class Plain(val x: Int)
data class Smart(val x: Int)
fun main() {
println(Plain(1) == Plain(1))
println(Smart(1) == Smart(1))
}理解度チェック
データクラスについての理解度を確認しましょう。
まとめ
データクラスでは、toString、equals、hashCode、copy、分割代入のサポートが自動生成されることを学びました。
データクラスは、UI状態やAPIモデルのように値を保持するオブジェクトに適しています。これで、Kotlinの関数、クラス、コンストラクタ、データクラスについて学びました。
よくある質問
「データクラス」レッスンは無料ですか?
はい。「データクラス」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Android Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Android Academyコースには全4レッスンが含まれています。
「データクラス」で何を学びますか?
データ保持に適した簡潔なクラスを作成します。 ブラウザで直接実行するハンズオンコードでAndroid Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Android Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAndroid Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「データクラス」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAndroid Academyレッスンでコードを書いて実行できますか?
はい。すべてのAndroid Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。