【Kotlin練習問題】データクラス

Kotlin

データクラスとは

ある特定のデータを保持するためのクラスを作りたいということはよくありますよね。

Kotlinではそういったクラスはデータクラスと呼ばれ、クラス宣言の前にdataとつけることによって、データクラスにすることができます。

data class Car(val type: String, val number: Int)

データクラスにするメリットは一般的にデータを保持しているクラスに対して使われるメソッドが自動で生成されるという点です。自動で生成されるメソッドは以下になります。

  • equalsとhashCode()
  • toString()  ”Car(type=super car, number=4254)”のような形式になります。
  • componentN() Nの部分はクラス宣言時のプロパティの順番に対応しています。以下のように使うことができます。

    val type = car.component1()
    val number = car.component2()
  • copy()

問題

以下のJavaコードをKotlinコードに書き換えてください。

Javaコード

public class Person {
    private final String name;
    private final int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

Kotlinコード

class Person

fun getPeople(): List<Person> {
    return listOf(Person("Alice", 29), Person("Bob", 31))
}

fun comparePeople(): Boolean {
    val p1 = Person("Alice", 29)
    val p2 = Person("Alice", 29)
    return p1 == p2  // trueになるようにしてください。
}

Kotlin Playgroundでコードの編集・動作確認ができます。

ヒント

Kotlinにおけるクラス宣言の形式は以下のようになります。

class クラス名(パラーメーター){ /*…*/ }

パラメーターの中は(val type :String)など、(名前: 型)の形式で表されます。

例)

class Car(val type: String){}
ヒント

答え

data class Person(val name: String, val age: Int)

fun getPeople(): List<Person> {
    return listOf(Person("Alice", 29), Person("Bob", 31))
}

fun comparePeople(): Boolean {
    val p1 = Person("Alice", 29)
    val p2 = Person("Alice", 29)
    return p1 == p2  // trueになるようにしてください。
}

[解説]

data修飾子をclassの前につけることで、パラメーターの中身が自動でクラスメンバになり、上記で紹介したメソッドも使えるようになっています。

dataを無くすとコンパイルエラーがおこることを確認してください。

答え

その他の問題はこちらからどうぞ。

おすすめ書籍

Kotlinの文法をまず学びたい!という方には以下の書籍がおすすめです。Kotlinは日本語書籍がまだ豊富とは言えない状況ですが、細かく解説されており、Kotlin入門者のかたでもつまずくことなく学習できると思います。

実際にアプリを作りながら覚えていきたい!という方には以下もお勧めです。はじめに上の書籍で文法をさらっと学んでから取り組むのがお勧めです。

プロフィール

プロフィール
コードラボJP

大学卒業後SEに就職、現在は退職しフリーランスとして活動中。
『初心者でも挫折せずに一人でプログラミングを学べる』をモットーに、コードラボJPを開設
お問い合わせ等はcodelabsjp@gmail.comまで

コードラボJPをフォローする
タイトルとURLをコピーしました