0Pricing
Android Academy · レッスン

データクラス

データ保持に適した簡潔なクラスを作成します。

「データクラス」は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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 関数を宣言する
  2. クラスとプロパティ
  3. コンストラクターとinit
  4. データクラス
← Android Academyに戻る