プライマリコンストラクターとプロパティパラメータ
プライマリコンストラクターとインラインのプロパティ宣言を使ってクラスを宣言します。
「プライマリコンストラクターとプロパティパラメータ」はCoddyKit上の無料Kotlin Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはKotlin Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Kotlin Academyコースには全4レッスンが含まれています。
プライマリコンストラクター
Kotlinのクラスでは、クラス名の直後にあるかっこの中でプライマリコンストラクターを宣言します。メソッド本体はなく、パラメーターリストだけを記述します。
最も簡単なクラス
修飾子のないプライマリコンストラクターは、クラス名の後では見えません。
class Greeter(val name: String) {
fun greet() = "Hello, $name!"
}
fun main() {
println(Greeter("Ada").greet())
}プロパティパラメーター
コンストラクターパラメーターにvalまたはvarを付けると、1つの手順でクラスプロパティにできます。
class Person(val name: String, var age: Int)
fun main() {
val p = Person("Bob", 30)
println("${p.name} is ${p.age}")
p.age = 31
println("Now ${p.age}")
}val/varのないパラメーター
val/varのないコンストラクターパラメーターはコンストラクター内だけで有効です。initブロックやプロパティ初期化子では使用できますが、後からアクセスすることはできません。
class Logger(prefix: String) {
val msg = "$prefix: ready"
}
fun main() {
val l = Logger("[INFO]")
println(l.msg)
// l.prefix // ERROR — not a property
}デフォルトパラメーター値
コンストラクターパラメーターにデフォルト値を指定すると、オーバーロード用の定型コードを避けられます。
class User(
val name: String,
val age: Int = 0,
val email: String = ""
)
fun main() {
println(User("Ana").age) // 0
println(User("Ben", 25).email) // ""
println(User("Cal", 30, "c@x.io").email)
}名前付き引数
位置による順序指定を省略し、呼び出し側でパラメーター名を指定できます。デフォルト値と組み合わせると特に便利です。
class HttpClient(
val baseUrl: String,
val timeoutMs: Int = 5000,
val retries: Int = 3
)
fun main() {
val c = HttpClient(
baseUrl = "https://api.example.com",
retries = 5
)
println("retries=${c.retries} timeout=${c.timeoutMs}")
}コンストラクターの可視性
private constructorを使用すると、外部からのインスタンス化を防げます。ファクトリーメソッドと組み合わせる場合によく使われます。
class Singleton private constructor() {
companion object {
val instance = Singleton()
}
}
fun main() {
val s = Singleton.instance
println(s)
}セカンダリーコンストラクター
constructorキーワードを使って追加のコンストラクターを定義できます。プライマリコンストラクターにはthis(...)で委譲する必要があります。
class Point(val x: Int, val y: Int) {
constructor(value: Int) : this(value, value)
}
fun main() {
println("${Point(3).x}, ${Point(3).y}") // 3, 3
}可視性を指定したコンストラクター
コンストラクターごとに異なる可視性を組み合わせて指定できます。ライブラリで便利です。
class Lib internal constructor(val key: String) {
companion object {
fun create(key: String) = Lib(key)
}
}
fun main() {
println(Lib.create("abc").key)
}initブロックのまとめ
構築中に実行するコードはinit { }ブロックに記述します。複数のinitブロックはソースコードの順序で実行されます。
class Validator(val value: String) {
init { require(value.isNotBlank()) { "value cannot be blank" } }
}
fun main() {
println(Validator("ok").value)
// Validator("") // throws IllegalArgumentException
}プロパティとロジックの組み合わせ
プロパティ宣言、セカンダリーコンストラクター、initブロックを組み合わせることで、柔軟な初期化パイプラインを構成できます。
class Account(
val owner: String,
initialBalance: Double = 0.0
) {
var balance: Double = initialBalance
private set
init {
require(initialBalance >= 0) { "balance must be non-negative" }
}
fun deposit(amount: Double) { balance += amount }
}
fun main() {
val a = Account("Alice", 100.0)
a.deposit(50.0)
println("${a.owner}: ${a.balance}") // Alice: 150.0
}確認問題
プライマリコンストラクターのパラメーターにvalキーワードを付けると、どうなりますか。
まとめ
プライマリコンストラクターはクラスヘッダーに記述します。プロパティパラメーターにはval/varを使用し、何も付けないパラメーターはコンストラクター内だけで有効です。デフォルト値を追加してオーバーロードを減らし、初期化処理はinitブロックで実行します。セカンダリーコンストラクターからはthis(...)で委譲します。
よくある質問
「プライマリコンストラクターとプロパティパラメータ」レッスンは無料ですか?
はい。「プライマリコンストラクターとプロパティパラメータ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Kotlin Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Kotlin Academyコースには全4レッスンが含まれています。
「プライマリコンストラクターとプロパティパラメータ」で何を学びますか?
プライマリコンストラクターとインラインのプロパティ宣言を使ってクラスを宣言します。 ブラウザで直接実行するハンズオンコードでKotlin Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Kotlin Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのKotlin Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「プライマリコンストラクターとプロパティパラメータ」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このKotlin Academyレッスンでコードを書いて実行できますか?
はい。すべてのKotlin Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- プライマリコンストラクターとプロパティパラメータ
- initブロックと初期化の順序
- fieldを使ったカスタムGetterとSetter
- lateinitと遅延初期化