0Pricing
Android Academy · レッスン

コンストラクターとinit

オブジェクトを作成して初期化します。

「コンストラクターとinit」はCoddyKit上の無料Android Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAndroid Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Android Academyコースには全4レッスンが含まれています。

コンストラクタとは

コンストラクタは、オブジェクトを作成するときに実行される特別なコードです。オブジェクトの初期値を設定します。

Kotlinでは、メインコンストラクタをクラス名のすぐ隣に記述します。

プライマリコンストラクタ

プライマリコンストラクタは、クラス名の後ろの括弧内に記述します。オブジェクトを作成するときに値を渡します。

ここでは、Dogを構築する際に名前が必要です。

class Dog(name: String) {
    val dogName = name
}

fun main() {
    val d = Dog("Rex")
    println(d.dogName)
}

コンストラクタ内のプロパティ

コンストラクタのパラメータの前にvalまたはvarを追加すると、自動的にプロパティになります。

これはKotlinで最も一般的な簡潔な書き方です。

class Dog(val name: String, var age: Int)

fun main() {
    val d = Dog("Rex", 3)
    println(d.name + " is " + d.age)
}

コンストラクタのデフォルト値

コンストラクタのパラメータにもデフォルト値を設定できます。その場合、呼び出し側では値を省略できます。

ここでは、ageが指定されなければ0になります。

class Dog(val name: String, var age: Int = 0)

fun main() {
    val d = Dog("Max")
    println(d.age)
}

initブロック

initブロックは、プライマリコンストラクタの一部として実行されます。1行のプロパティ宣言には収まらない初期化処理に使用します。

コンストラクタのパラメータを読み取ることもできます。

class Dog(val name: String) {
    init {
        println("Created dog: " + name)
    }
}

fun main() {
    Dog("Rex")
}

initでの検証

initの一般的な用途は、入力値をチェックすることです。ここではrequireを使って、年齢が負にならないようにしています。

チェックに失敗すると、オブジェクトは作成されません。

class Person(val age: Int) {
    init {
        require(age >= 0) { "Age cannot be negative" }
    }
}

fun main() {
    val p = Person(25)
    println(p.age)
}

実行順序

プロパティの初期化処理とinitブロックは、クラス内に記述された順番に上から下へ実行されます。

ある行が、その上で設定された値に依存している場合に重要です。

class Demo {
    val a = 1
    init { println("a is " + a) }
    val b = a + 1
    init { println("b is " + b) }
}

fun main() {
    Demo()
}

計算プロパティ

クラス本体の中で、コンストラクタの値からプロパティを計算できます。

ここでは、areaがwidthとheightから算出されています。

class Rect(val width: Int, val height: Int) {
    val area = width * height
}

fun main() {
    println(Rect(3, 4).area)
}

セカンダリコンストラクタ

クラスには、constructorキーワードを使ったセカンダリコンストラクタも定義できます。セカンダリコンストラクタは、this(...)を使ってプライマリコンストラクタに委譲する必要があります。

通常はデフォルト値で十分なため、あまり使用されません。

class Dog(val name: String) {
    constructor() : this("Unknown")
}

fun main() {
    println(Dog().name)
}

新しいオブジェクトの使用

コンストラクタとinitの実行が終わると、オブジェクトを使用できる状態になります。すぐにプロパティを読み取ったり、メソッドを呼び出したりできます。

ここでは、コンストラクタが残高を設定し、メソッドがそこから支出しています。

class Account(var balance: Int) {
    fun spend(amount: Int) {
        balance = balance - amount
    }
}

fun main() {
    val acc = Account(100)
    acc.spend(30)
    println(acc.balance)
}

コンストラクタで準備する

コンストラクタとinitブロックによって、すべてのオブジェクトが有効な状態で開始するようにできます。

  • プライマリコンストラクタ: 値を宣言して受け取ります。
  • init: 初期化と検証を実行します。

これにより、アプリ内で未完成のオブジェクトが作られるのを防げます。

理解度チェック

コンストラクタとinitについての理解度を確認しましょう。

まとめ

プライマリコンストラクタと、そこにval/varでプロパティを宣言する方法、さらにデフォルト値を設定する方法を学びました。

initブロックは初期化と検証を担当し、プロパティの初期化処理とともに上から下へ実行されます。次は、こうした定型コードを自動生成してくれるデータクラスについて学びます。

よくある質問

「コンストラクターとinit」レッスンは無料ですか?

はい。「コンストラクターとinit」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Android Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Android Academyコースには全4レッスンが含まれています。

「コンストラクターとinit」で何を学びますか?

オブジェクトを作成して初期化します。 ブラウザで直接実行するハンズオンコードでAndroid Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Android Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのAndroid Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「コンストラクターとinit」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このAndroid Academyレッスンでコードを書いて実行できますか?

はい。すべてのAndroid Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

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

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