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