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.")
}
}
出力:
コトリン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
ブロックのコードはプライマリ コンストラクタの一部として記述されているため、その一部になります。
また、プライマリ コンストラクターによるセカンダリ コンストラクターの委任は、前者の実行中に最初に行われるため、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)
}
出力:
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