0Pricing
Kotlin Academy · レッスン

プライマリコンストラクターとプロパティパラメータ

プライマリコンストラクターとインラインのプロパティ宣言を使ってクラスを宣言します。

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

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

  1. プライマリコンストラクターとプロパティパラメータ
  2. initブロックと初期化の順序
  3. fieldを使ったカスタムGetterとSetter
  4. lateinitと遅延初期化
← Kotlin Academyに戻る