Last Updated on February 7, 2023 by
Untuk setiap properti, method getter mengembalikan nilainya sementara method setter menyetel atau memperbarui nilainya. Mengingat hal ini, method setter and getter masing-masing juga dikenal sebagai accessors dan mutators.
Di Kotlin, method setter dan method getter tidak perlu dibuat secara eksplisit. Library Kotlin menyediakan keduanya secara default.
Dalam artikel kali ini, kita akan belajar kotlin properties dan cara mengaksesnya. Properti serupa dengan bidang di Java, tetapi ada beberapa perbedaan penting. Misalnya, kotlin memiliki method setter and getter yang dibuat secara otomatis. Mereka juga dapat dideklarasikan pada cakupan paket tingkat atas – mereka tidak harus menjadi milik suatu kelas.
Table of Contents
Mengenal Properti : Method Setter And Getter
Properti adalah bagian penting dari bahasa pemrograman apa pun. Di Kotlin, kita dapat mendefinisikan properti dengan cara yang sama seperti kita mendeklarasikan variabel lain. Properti Kotlin dapat dideklarasikan sebagai dapat diubah menggunakan kata kunci var atau tidak dapat diubah menggunakan kata kunci val.
Di sini, penginisialisasi properti , Method getter dan method setter adalah opsional. Kita juga dapat menghilangkan properti type , jika dapat disimpulkan dari penginisialisasi. Sintaks deklarasi properti read-only atau tidak dapat diubah berbeda dari yang dapat diubah dalam dua cara :
- Itu dimulai dengan val alih-alih var .
- Itu tidak memungkinkan setter.
Contoh :
class Address { var name: String = "Dark, Glory" var street: String = "Sesetan" var city: String = "Denpasar" var state: String? = null var zip: String = "199799" }
Untuk menggunakan properti, cukup rujuk dengan namanya:
fun copyAddress(address: Address): Address { val result = Address() result.name = address.name result.street = address.street return result }
Menggunakan Method Setter And Getter
Di Kotlin, Setter digunakan untuk menyetel nilai variabel apa pun dan Getter digunakan untuk mendapatkan nilai. Method Setter and Getter dihasilkan secara otomatis dalam kode.
Sintaks Properti
var <propertyName>[: <PropertyType>] [= <property_initializer>] [<getter>] [<setter>]
Penginisialisasi, Method Setter and Getter adalah opsional. Tipe properti bersifat opsional jika dapat disimpulkan dari penginisialisasi atau tipe pengembalian getter, seperti yang ditunjukkan di bawah ini:
var initialized = 1 // var allByDefault // ERROR: explicit initializer required, default getter and setter implied
Sintaks lengkap dari deklarasi properti read-only berbeda dari yang bisa berubah dalam dua cara: dimulai dengan val alih -alih var dan tidak mengizinkan Setter:
val simple: Int? val inferredType = 1
Anda dapat menentukan pengakses khusus untuk properti. Jika Anda menentukan custom getter, itu akan dipanggil setiap kali Anda mengakses properti (dengan cara ini Anda dapat mengimplementasikan properti yang dihitung). Berikut adalah contoh custom getter:
class Rectangle(val width: Int, val height: Int) { val area: Int // property type is optional since it can be inferred from the getter's return type get() = this.width * this.height }
Anda dapat menghilangkan tipe properti jika dapat disimpulkan dari method getter:
val area get() = this.width * this.height
Jika Anda menentukan setter khusus, itu akan dipanggil setiap kali Anda menetapkan nilai ke properti, kecuali inisialisasinya. setter khusus terlihat seperti ini:
var stringRepresentation: String get() = this.toString() set(value) { setDataFromString(value) }
Secara konvensi, nama parameter method setter adalah value, tetapi Anda dapat memilih nama yang berbeda jika diinginkan.
Jika Anda perlu memberi anotasi pada pengakses atau mengubah visibilitasnya, tetapi Anda tidak ingin mengubah implementasi default, Anda dapat menentukan pengakses tanpa menentukan body :
var setterVisibility: String = "abc" private set var setterWithAnnotation: Any? = null @Inject set
Contoh Custom Method Setter And Getter
class Registration( email: String, pwd: String, age: Int , gender: Char) { var email_id: String = email get() { return field.toLowerCase() } var password: String = pwd set(value){ field = if(value.length > 6) value else throw IllegalArgumentException("Passwords is too small") } var age: Int = age set(value) { field = if(value > 18 ) value else throw IllegalArgumentException("Age must be 18+") } var gender : Char = gender set (value){ field = if(value == 'M') value else throw IllegalArgumentException("User should be male") } } fun main(args: Array<String>) { val example = Registration("DARKHINT2475@GMAIL.COM","Examples@123",25,'M') println("${example.email_id}") example.email_id = "DAREDAWNTO@CAREERS.ORG" println("${example.email_id}") println("${example.password}") println("${example.age}") println("${example.gender}") // throw IllegalArgumentException("Passwords is too small") example.password = "abc" // throw IllegalArgumentException("Age should be 18+") example.age= 5 // throw IllegalArgumentException("User should be male") example.gender = 'F' }
Membuat Backing Field Dengan Method Setter And Getter
Di Kotlin, kolom hanya digunakan sebagai bagian dari properti untuk menyimpan nilainya di memori. Bidang tidak dapat dideklarasikan secara langsung. Namun, saat properti membutuhkan backing fields Kotlin menyediakannya secara otomatis. Backing Fields ini dapat dirujuk di accesors menggunakan field pengidentifikasi :
var counter = 0 set(value) { if (value >= 0) field = value // counter = value // ERROR: Using actual name 'counter' would make setter recursive }
Field Pengidentifikasi hanya dapat digunakan di pengakses properti.
Bidang dukungan akan dihasilkan untuk properti jika menggunakan implementasi default dari setidaknya satu pengakses, atau jika pengakses khusus mereferensikannya melalui field pengidentifikasi.
Misalnya, tidak akan ada backing fields getter akan digunakan dalam kasus berikut:
val isEmpty: Boolean get() = this.size == 0
Membuat Backing Properties Dengan Method Setter And Getter
Jika Anda ingin melakukan sesuatu yang tidak sesuai dengan skema Backing fields, Anda selalu dapat menggunakan Backing properties :
private var _table: Map<String, Int>? = null public val table: Map<String, Int> get() { if (_table == null) { _table = HashMap() // Type parameters are inferred } return _table ?: throw AssertionError("Set to null by another thread") }
Mengubah Nilai Properti dengan Method Setter And Getter
fun main(args: Array<String>) { val diana = Girl() diana.actualAge = 15 diana.age = 15 println("Diana: actual age = ${diana.actualAge}") println("Diana: pretended age = ${diana.age}") val laila = Girl() laila.actualAge = 35 laila.age = 35 println("Laila: actual age = ${laila.actualAge}") println("Laila: pretended age = ${laila.age}") } class Girl { var age: Int = 0 get() = field set(value) { field = if (value < 18) 18 else if (value >= 18 && value <= 30) value else value-3 } var actualAge: Int = 0
Di sini, actual age properti bekerja seperti yang diharapkan. Namun, ada logika tambahan adalah setter untuk mengubah nilai usia Properti.
Kesimpulan
Dalam pembahasan ini, kita melihat method setter and getter untuk properti. Mereka menyediakan fungsionalitas yang kuat dan ringkas melalui metode get() dan set() opsional. Kita harus berhati-hati untuk tidak melakukan perhitungan yang salah dalam metode ini dan untuk meminimalkan efek samping agar kode kita tetap bersih dan mudah dipahami.
Temukan lebih banyak artikel seri belajar Kotlin maupun bahasa pemrograman lainnya hanya di CODEKEY. Klik https://codekey.id/ sekarang juga untuk langsung belajar gratis. Sampai bertemu lagi!
Jasa Pembuatan Aplikasi, Website dan Internet Marketing | PT APPKEY
PT APPKEY adalah perusahaan IT yang khusus membuat aplikasi Android, iOS dan mengembangkan sistem website. Kami juga memiliki pengetahuan dan wawasan dalam menjalankan pemasaran online sehingga diharapkan dapat membantu menyelesaikan permasalahan Anda.