Kotlin での二次コンストラクターの使用

Kailash Vaviya 2023年1月30日
  1. コトリンの二次建設業者の歴史
  2. Kotlin セカンダリコンストラクタ
  3. Kotlin で複数のセカンダリコンストラクタを作成する
  4. 別の既存のセカンダリコンストラクタからセカンダリコンストラクタを呼び出す
  5. 親クラスから 2 次コンストラクターを子クラスの 2 次コンストラクターから呼び出す
Kotlin での二次コンストラクターの使用

コンストラクターは、オブジェクトがオブジェクト指向のプログラミング言語で作成されるときに自動的に呼び出されるメンバー関数です。

Kotlin は OOPS 言語であるため、オブジェクトの初期化にもコンストラクターを使用します。Kotlin には、プライマリコンストラクタとセカンダリコンストラクタの 2つのコンストラクタがあります。

この記事では、Kotlin のセカンダリコンストラクターの概念とその使用方法を紹介します。

コトリンの二次建設業者の歴史

二次コンストラクターは 2015 年まで Kotlin でサポートされていませんでした。それまで、開発者はブロー手法の 1つを使用して、二次コンストラクターのほとんどのユースケースを解決しました。

  1. クラスの隣にファクトリメソッドを定義します。
  2. パラメータのデフォルト値を定義します。
  3. 別のオブジェクトで定義されたファクトリメソッドを使用します。

これらの手法は十分に優れていましたが、二次コンストラクターが必要でした。Kotlin は、2015 年の M11 の発売により、セカンダリコンストラクターのサポートを開始しました。

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

一次コンストラクターはクラスを初期化するための簡潔な方法を提供しますが、二次コンストラクターはそれらを拡張するときに必要になります。さらに、セカンダリコンストラクターでは初期化ロジックを追加することもできます。

プログラムに含めることができるプライマリコンストラクタは 1つだけですが、Kotlin では複数のセカンダリコンストラクタを作成できます。

Kotlin で constructor キーワードを使用してセカンダリコンストラクターを作成して使用できます。Kotlin プログラムには、1つまたは複数のセカンダリコンストラクターを含めることができます。

セカンダリコンストラクタは一般的に回避されますが、クラスを拡張するために使用されます。その理由は、複数のコンストラクターを介して複数の方法で単一のクラスを初期化するのに役立つためです。

構文:

class ABC {
    constructor(data: String) {
        // code
}

二次コンストラクターをよりよく理解するために、次の例を見てみましょう。2つの整数の積を出力するクラス Product のセカンダリコンストラクターを作成します。

サンプルコード:

fun main(args: Array<String>) {
    Product(3, 7)
}

class Product {
    //Creating a secondary constructor
    constructor(x: Int, y:Int){
        var i = x * y
            println("The product of integers 3 and 7 is: ${i}")
    }
}

出力:

Kotlin でのセカンダリコンストラクターの作成

Kotlin で複数のセカンダリコンストラクタを作成する

Kotlin には複数のコンストラクターを含めることもできます。コンパイラが呼び出す多くのコンストラクタのどれが、渡された引数に基づいて決定されます。

サンプルコード:

fun main(args: Array<String>) {
    Student(11035, "David")
    Student(11047,"Steve","New York")
}

class Student {

    constructor (std_id : Int, std_name: String ) {
        var id: Int = std_id
        var name: String = std_name
        print("Student's ID is: $id, ")
        println("Student's Name is: $name")
        println()
    }

    constructor (std_id : Int, std_name: String, std_city: String) {
        var id: Int = std_id
        var name: String = std_name
        var city: String = std_city
        print("Student's ID is: $id, ")
        print("Student's Name is: $name, ")
        println("Student's City is: $city")
    }
}

出力:

Kotlin で複数のセカンダリコンストラクターを使用する

別の既存のセカンダリコンストラクタからセカンダリコンストラクタを呼び出す

既存のセカンダリコンストラクタを使用して、Kotlin でセカンダリコンストラクタを呼び出すことができます。this() 関数を使用する必要があります。

サンプルコード:

fun main(args: Array<String>){
    Product(3,7)
}

class Product {
    // using this to call another secondary constructor
    constructor(x: Int,y:Int) : this(x,y,5) {
        var ProductOfTwo = x * y
        println("The product of the two integers is: $ProductOfTwo")
    }

    constructor(x: Int, y: Int,z: Int) {
        var ProductOfThree = x * y * z
        println("The product of the three integers is is: $ProductOfThree")
    }
}

出力:

Kotlin の別のセカンダリコンストラクタからセカンダリコンストラクタを呼び出す

親クラスから 2 次コンストラクターを子クラスの 2 次コンストラクターから呼び出す

別のコンストラクターからセカンダリコンストラクターを呼び出すだけでなく、子クラスのコンストラクターから親クラスのセカンダリコンストラクターを呼び出すこともできます。継承に似ています。

コンストラクターを継承するには、super キーワードを使用する必要があります。

サンプルコード:

fun main(args: Array<String>) {
    childClass(11035, "David")
}

open class parentClass {

    constructor (std_id : Int, std_name: String, std_city: String) {
        var id: Int = std_id
        var name: String = std_name
        var city: String = std_city
        print("Student's ID is: $id, ")
        print("Student's Name is: $name, ")
        println("Student's City is: $city")
        println()
    }
}

class childClass : parentClass {

    constructor (std_id : Int, std_name: String):super(std_id,std_name,"New York"){
        var id: Int = std_id
        var name: String = std_name
        print("Student's ID is: $id, ")
        println("Student's Name is: $name")
    }
}

出力:

Kotlin の子クラスの 2 次コンストラクターから親クラスの 2 次コンストラクターを呼び出す

著者: Kailash Vaviya
Kailash Vaviya avatar Kailash Vaviya avatar

Kailash Vaviya is a freelance writer who started writing in 2019 and has never stopped since then as he fell in love with it. He has a soft corner for technology and likes to read, learn, and write about it. His content is focused on providing information to help build a brand presence and gain engagement.

LinkedIn

関連記事 - Kotlin Constructor