Konstruktor dan Penginisialisasi Kotlin (Dengan Contoh)

Pada artikel ini, Anda akan belajar tentang konstruktor di Kotlin (baik konstruktor primer dan sekunder) serta blok penginisialisasi dengan bantuan contoh.

Konstruktor adalah cara ringkas untuk menginisialisasi properti kelas.

Ini adalah fungsi anggota khusus yang dipanggil ketika sebuah objek dibuat instance-nya (dibuat). Namun, cara kerjanya di Kotlin sedikit berbeda.

Di Kotlin, ada dua konstruktor:

  • Konstruktor utama - cara singkat untuk menginisialisasi kelas
  • Konstruktor sekunder - memungkinkan Anda untuk meletakkan logika inisialisasi tambahan

Pembuat Utama

Konstruktor utama adalah bagian dari tajuk kelas. Berikut contohnya:

 class Person (val firstName: String, var age: Int) (// class body)

Blok kode dikelilingi oleh kurung adalah konstruktor utama: (val firstName: String, var age: Int).

Konstruktor mendeklarasikan dua properti: firstName( properti read-only seperti yang dideklarasikan menggunakan kata kunci val) dan age(properti baca-tulis seperti yang dideklarasikan dengan kata kunci var).

Contoh: Pembuat 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) ( )

Saat Anda menjalankan program, hasilnya adalah:

 Nama Depan = Joe Umur = 25

Ketika objek Personkelas dibuat, "Joe"dan 25nilai diteruskan seolah-olah Personadalah sebuah fungsi.

Ini menginisialisasi firstNamedan ageproperti objek person1 ke "Joe"dan 25masing - masing.

Ada cara lain untuk menggunakan konstruktor utama.

Blok Konstruktor dan Penginisialisasi Utama

Konstruktor utama memiliki sintaks terbatas, dan tidak boleh berisi kode apa pun.

Untuk meletakkan kode initilisasi (bukan hanya kode untuk menginisialisasi properti), digunakan blok penginisialisasi. Itu diawali dengan initkata kunci. Mari modifikasi contoh di atas dengan blok penginisialisasi:

 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") ) )

Saat Anda menjalankan program, hasilnya adalah:

 First Name = Joe Age = 25

Di sini, parameter fName dan personAge di dalam tanda kurung menerima nilai "Joe"dan 25masing - masing saat objek person1 dibuat. Namun, fName dan personAge digunakan tanpa menggunakan varatau val, dan bukan properti Personkelas.

The Personkelas memiliki dua sifat firstName, dan usia diumumkan.

Saat person1objek dibuat, kode di dalam blok penginisialisasi dijalankan. Blok penginisialisasi tidak hanya menginisialisasi propertinya tetapi juga mencetaknya.

Berikut 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 membedakan parameter konstruktor dan properti, nama yang berbeda digunakan (fName dan firstName, serta personAge dan usia). Lebih umum menggunakan _firstName dan _age daripada nama yang sama sekali berbeda untuk parameter konstruktor. Sebagai contoh:

 class Person (_firstName: String, _age: Int) (val firstName = _firstName.capitalize () var age = _age // blok penginisialisasi init (…)) 

Nilai Default di Pembuat Utama

Anda dapat memberikan nilai default ke parameter konstruktor (mirip dengan memberikan argumen default ke 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") ) )

Saat Anda menjalankan program, hasilnya adalah:

 Nama Depan = Joe Umur = 25 orang2 dipakai Nama Depan = Jack Umur = 0 orang3 dipakai Nama Depan = TIDAK DIKETAHUI Umur = 0

Kotlin Secondary Constructor

Di Kotlin, sebuah kelas juga bisa berisi satu atau beberapa konstruktor sekunder. Mereka dibuat menggunakan constructorkata kunci.

Konstruktor sekunder tidak begitu umum di Kotlin. Penggunaan paling umum dari konstruktor sekunder muncul saat Anda perlu memperluas kelas yang menyediakan beberapa konstruktor yang menginisialisasi kelas dengan cara yang berbeda. Pastikan untuk memeriksa Warisan Kotlin sebelum Anda mempelajarinya.

Berikut cara membuat konstruktor sekunder di Kotlin:

 class Log (konstruktor (data: String) (// beberapa kode) konstruktor (data: String, numberOfData: Int) (// beberapa kode))

Di sini, Logkelas memiliki dua konstruktor sekunder, tetapi tidak ada konstruktor utama.

Anda dapat memperluas kelas sebagai:

 kelas Log (konstruktor (data: String) (// kode) konstruktor (data: String, numberOfData: Int) (// code)) kelas AuthLog: Log (konstruktor (data: String): super (data) (// kode ) konstruktor (data: String, numberOfData: Int): super (data, numberOfData) (// code))

Di sini, konstruktor dari kelas turunan AuthLogmemanggil konstruktor yang sesuai dari kelas dasar Log. Untuk itu, super()digunakan.

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

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

Contoh: Kotlin Secondary Constructor

 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) ( ) )

Saat Anda menjalankan program, hasilnya adalah:

 Dari AuthLog -> Kata Sandi Buruk: 10 kali

Catatan: Konstruktor sekunder harus menginisialisasi kelas dasar atau mendelegasikan ke konstruktor lain (seperti dalam contoh di atas) jika kelas tersebut tidak memiliki konstruktor utama.

Artikel yang menarik...