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 Person
kelas dibuat, "Joe"
dan 25
nilai diteruskan seolah-olah Person
adalah sebuah fungsi.
Ini menginisialisasi firstName
dan age
properti objek person1 ke "Joe"
dan 25
masing - 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 init
kata 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 25
masing - masing saat objek person1 dibuat. Namun, fName dan personAge digunakan tanpa menggunakan var
atau val
, dan bukan properti Person
kelas.
The Person
kelas memiliki dua sifat firstName, dan usia diumumkan.
Saat person1
objek 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 constructor
kata 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, Log
kelas 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 AuthLog
memanggil 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.