HOWTO · Kotlin

Kotlin Init とコンストラクターの違い

コンストラクターと Kotlin 初期化ブロックは、このプログラミング言語の重要な部分です。 この記事では、init とコンストラクターの違いの概要を説明します。

Kotlin はオブジェクト指向プログラミング (OOP) 言語です。 コンストラクターと init ブロックは、この Android プログラミング言語の重要なコンポーネントです。

この記事では、これら 2つのコンポーネントの違いについて説明します。

Kotlin コンストラクター

名前が示すように、Kotlin コンストラクターはクラスの構築に役立ちます。 クラスは OOP 言語のベースです。

Kotlin には、プライマリとセカンダリの 2 種類のコンストラクタがあります。 各クラスには、1つのプライマリ コンストラクターと、constructor キーワードを使用して定義された任意の数のセカンダリ コンストラクターを含めることができます。

Kotlin プライマリ コンストラクタ

Kotlin のプライマリ コンストラクターは、常にクラス ヘッダーの一部です。 オプションのパラメータを持つことができます。

class exampleClass public constructor(str: String, i: Int){
    //functions
}

すべてのクラス ヘッダーにプライマリ コンストラクターがあるのに、なぜ多くのクラスが constructor キーワードを使用せずに宣言されているのか疑問に思うかもしれません。

プライマリ コンストラクターでアクセス修飾子または注釈を使用したくない場合は、キーワードを省略できます。

class exampleClass (str: String, i: Int){
    //functions
}

プライマリ コンストラクターはクラス ヘッダーの一部であるため、コードを含めることはできません。 init キーワードを使用してコードを初期化ブロックに入れることができます。これについては、この記事の後半で詳しく説明します。

コードの記述は許可されていませんが、次の構文を使用してプライマリ コンストラクターのプロパティを宣言および初期化できます。

class exampleClass (val str: String, var i: Int){
    //functions
}

また

class exampleClass (
    val str: String,
    var i: Int,
){
    //functions
}

プライマリ コンストラクターでプロパティのデフォルト値を宣言することもできます。

class exampleClass (val str: String, var i: Int = 15){
    //functions
}

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

プライマリ コンストラクターとは別に、constructor キーワードを使用して 1つまたは複数のセカンダリ コンストラクターを宣言することもできます。

クラスのすべての二次コンストラクターは、this キーワードを使用して一次コンストラクターに委譲する必要があります。 Kotlin でセカンダリ コンストラクターを使用する例を次に示します。

fun main(args: Array<String>){
    var Stu = Student("Zack",17, "Kotlin")
    Stu.printStudentDetails()
}

// This is the primary constructor
class Student constructor(var firstName: String, var age: Int){
    var expert: String = "Nothing"

    // Creating a secondary constructor
    constructor (firstName: String, age: Int, expert: String): this(firstName,age){
        this.expert = expert
    }

    fun printStudentDetails(){
        println("$firstName, a $age years old student, is an expert in $expert.")
    }
}

出力:

Kotlin 二次コンストラクタの例

実行コード

コトリンinit

Kotlin init キーワードは、初期化ブロックを記述するために使用されます。 これらのブロックは、プライマリ コンストラクターのコードを記述するのに役立ちます。

クラスヘッダーの一部であるため、プライマリコンストラクターにコードを記述することはできません。 したがって、そのために二次コンストラクタまたは初期化ブロックを使用できます。

Kotlin init ブロックでプライマリ コンストラクターのパラメーターとプロパティを使用することもできます。

指定された数値が 50 より大きいか、または Kotlin init ブロックを使用していないかを確認する例を見てみましょう。

class Numbers(firstName: String, num2: Int) {
    var res = false
    val n1 = 50

    init {
        res = num2 > n1
    }
}

fun main(){
    var numbers = Numbers("This number is greater than 50", 63)
    println(numbers.res)
}

出力:

Kotlin init の例

実行コード

Kotlin init ブロックのコードはプライマリ コンストラクタの一部として記述されているため、その一部になります。

また、プライマリ コンストラクターによるセカンダリ コンストラクターの委任は、前者の実行中に最初に行われるため、init ブロックはセカンダリ コンストラクターの関数の前に実行されます。

コード例を次に示します。 このコードでは、Kotlin init の上にセカンダリ コンストラクター コードを記述しました。 ただし、init コードが最初に実行されます。

class Person {
    constructor(i: Int) {
        println("Person $i")
    }

    init {
        println("This part will execute before the secondary constructor's code.")
    }
}

fun main() {
    Person(1)
}

出力:

Kotlin init が最初の例を実行

実行コード