Pembina dan Pemula Kotlin (Dengan Contoh)

Dalam artikel ini, anda akan belajar mengenai konstruktor di Kotlin (baik konstruktor primer dan sekunder) serta blok penginisialisasi dengan bantuan contoh.

Pembina adalah cara ringkas untuk memulakan sifat kelas.

Ini adalah fungsi anggota khas yang dipanggil ketika objek dibuat (dibuat). Namun, bagaimana mereka bekerja di Kotlin sedikit berbeza.

Di Kotlin, terdapat dua pembina:

  • Pembina utama - cara ringkas untuk memulakan kelas
  • Pembina sekunder - membolehkan anda meletakkan logik inisialisasi tambahan

Pembina Utama

Pembina utama adalah sebahagian daripada tajuk kelas. Inilah contohnya:

 Orang kelas (val firstName: String, var age: Int) (// badan kelas)

Blok kod dikelilingi oleh kurungan adalah pembina utama: (val firstName: String, var age: Int).

Pembina mengisytiharkan dua sifat: firstName(harta hanya baca seperti yang dinyatakan menggunakan kata kunci val) dan age(harta baca-tulis seperti yang dinyatakan dengan kata kunci var).

Contoh: Pembina Utama

 fun main(args: Array) ( val person1 = Person("Joe", 25) println("First Name = $(person1.firstName)") println("Age = $(person1.age)") ) class Person(val firstName: String, var age: Int) ( )

Semasa anda menjalankan program, outputnya adalah:

 Nama Depan = Joe Umur = 25

Apabila objek Personkelas dibuat, "Joe"dan 25nilai dilalui seolah-olah Personfungsi.

Ini memulakan firstNamedan agesifat objek objek1 "Joe"dan 25masing - masing.

Terdapat cara lain untuk menggunakan pembina utama.

Blok Pembina Utama dan Initializer

Pembina utama mempunyai sintaks terkawal, dan tidak boleh mengandungi kod apa pun.

Untuk meletakkan kod initilization (bukan hanya kod untuk menginisialisasi sifat), blok inisialisasi digunakan. Ia diawali dengan initkata kunci. Mari ubah contoh di atas dengan blok pemula:

 fun main(args: Array) ( val person1 = Person("joe", 25) ) class Person(fName: String, personAge: Int) ( val firstName: String var age: Int // initializer block init ( firstName = fName.capitalize() age = personAge println("First Name = $firstName") println("Age = $age") ) )

Semasa anda menjalankan program, outputnya adalah:

 First Name = Joe Age = 25

Di sini, parameter fName dan personAge di dalam kurungan menerima nilai "Joe"dan 25masing - masing apabila objek person1 dibuat. Walau bagaimanapun, fName dan personAge digunakan tanpa menggunakan varatau val, dan bukan sifat Personkelas.

The Personkelas mempunyai dua hartanah firstName, dan umur diisytiharkan.

Apabila person1objek dibuat, kod di dalam blok inisialisasi dijalankan. Blok inisialisasi tidak hanya menginisialisasi sifatnya tetapi juga mencetaknya.

Inilah cara lain untuk melakukan tugas yang sama:

 fun main(args: Array) ( val person1 = Person("joe", 25) ) class Person(fName: String, personAge: Int) ( val firstName = fName.capitalize() var age = personAge // initializer block init ( println("First Name = $firstName") println("Age = $age") ) )

Untuk membezakan parameter konstruktor dan harta benda, nama yang berbeza digunakan (fName dan nama pertama, dan personAge dan umur). Lebih biasa menggunakan _firstName dan _age dan bukannya nama yang sama sekali berbeza untuk parameter pembina. Sebagai contoh:

 Orang kelas (_firstName: String, _age: Int) (val firstName = _firstName.capitalize () var age = _age // inisialisasi blok init (…)) 

Nilai Lalai dalam Pembina Utama

Anda boleh memberikan nilai lalai untuk parameter konstruktor (serupa dengan memberikan argumen lalai kepada fungsi). Sebagai contoh:

 fun main(args: Array) ( println("person1 is instantiated") val person1 = Person("joe", 25) println("person2 is instantiated") val person2 = Person("Jack") println("person3 is instantiated") val person3 = Person() ) class Person(_firstName: String = "UNKNOWN", _age: Int = 0) ( val firstName = _firstName.capitalize() var age = _age // initializer block init ( println("First Name = $firstName") println("Age = $age") ) )

Semasa anda menjalankan program, outputnya adalah:

 Nama Depan = Joe Umur = 25 orang2 dicantumkan Nama Pertama = Umur Jack = 0 orang3 adalah nama pertama = TIDAK DIKETAHUI Umur = 0

Pembina Sekunder Kotlin

Di Kotlin, kelas juga boleh mengandungi satu atau lebih pembina sekunder. Mereka dibuat menggunakan constructorkata kunci.

Pembina sekunder tidak begitu biasa di Kotlin. Penggunaan konstruktor sekunder yang paling biasa muncul apabila anda perlu memperluas kelas yang menyediakan pelbagai pembina yang memulakan kelas dengan cara yang berbeza. Pastikan anda memeriksa Kotlin Inheritance sebelum anda mempelajarinya.

Inilah cara anda boleh membuat konstruktor sekunder di Kotlin:

 kelas Log (konstruktor (data: String) (// beberapa kod) pembina (data: String, numberOfData: Int) (// beberapa kod))

Di sini, Logkelas ini mempunyai dua pembina sekunder, tetapi tidak ada pembina utama.

Anda boleh melanjutkan kelas sebagai:

 class Log (konstruktor (data: String) (// code) konstruktor (data: String, numberOfData: Int) (// code)) class AuthLog: Log (konstruktor (data: String): super (data) (// kod ) pembina (data: String, numberOfData: Int): super (data, numberOfData) (// kod))

Di sini, pembina kelas turutan AuthLogmemanggil pembina kelas asas yang sepadan Log. Untuk itu, super()digunakan.

Di Kotlin, anda juga boleh memanggil konstruktor dari konstruktor lain dari kelas yang sama (seperti di Java) menggunakan this().

 class AuthLog: Log (konstruktor (data: String): ini (data, 10) (// code) konstruktor (data: String, numberOfData: Int): super (data, numberOfData) (// code)) 

Contoh: Pembina Sekunder Kotlin

 fun main(args: Array) ( val p1 = AuthLog("Bad Password") ) open class Log ( var data: String = "" var numberOfData = 0 constructor(_data: String) ( ) constructor(_data: String, _numberOfData: Int) ( data = _data numberOfData = _numberOfData println("$data: $numberOfData times") ) ) class AuthLog: Log ( constructor(_data: String): this("From AuthLog -> " + _data, 10) ( ) constructor(_data: String, _numberOfData: Int): super(_data, _numberOfData) ( ) )

Semasa anda menjalankan program, outputnya adalah:

 Dari AuthLog -> Kata Laluan Buruk: 10 kali

Catatan: Pembina sekunder mesti memulakan kelas asas atau mewakilkan kepada pembina yang lain (seperti dalam contoh di atas) jika kelas tidak mempunyai konstruktor utama.

Artikel menarik...