この記事では、クラスを正しく初期化するためのコンストラクタについてまとめます。
コンストラクタ
Kotlin のコンストラクタは、constructor というキーワードで定義します。
|
1 2 3 4 5 6 7 8 9 10 |
class Person { var name: String = "" var age: Int = 0 constructor(name: String, age: Int) { this.name = name this.age = age } } |
このクラスは、以下のように使用することが出来ます。
|
1 2 3 4 5 6 |
fun main() { val taro = Person("太郎", 35) println("${taro.name}") // 太郎 println("${taro.age}") // 35 } |
プライマリコンストラクタ
クラスを定義するとき、コンストラクタは定義しなくても良いです。
また、Kotlin では、以下のように省略して記述することもできます。
|
1 2 |
class Person(val name: String, val age: Int) |
コンストラクタに修飾子やアノテーションを付加しない場合、引数をクラスのメンバー変数に代入するだけであれば、1行で定義することができます。
このように定義するコンストラクタを「プライマリコンストラクタ」と呼びます。
セカンダリコンストラクタ
引数の数を変更したり、コンストラクタを複数ほしい場合があります。
Kotlin のクラスでは、プライマリコンストラクタとは別にセカンダリコンストラクタを0個以上定義することができます。
|
1 2 3 4 5 6 7 8 9 10 11 |
class Person(val name: String, val age: Int) { constructor(name: String) : this(name, 20) } fun main() { val taro = Person("太郎", 35) val ziro = Person("次郎") println("${taro.name}, ${taro.age}") // 太郎, 35 println("${ziro.name}, ${ziro.age}") // 次郎, 20 } |
セカンダリコンストラクタの引数リストの後に「:」を挟んで、プライマリを呼出しています。
今回の場合は、プライマリコンストラクタの引数 age にデフォルト値を設定してもいいです。
|
1 2 3 4 5 6 7 8 9 |
class Person(val name: String, val age: Int = 20) fun main() { val taro = Person("太郎", 35) val ziro = Person("次郎") println("${taro.name}, ${taro.age}") // 太郎, 35 println("${ziro.name}, ${ziro.age}") // 次郎, 20 } |