Modifier Visibilitas
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Kotlin di Coddy. Pelajaran 8 dari 57.
Enkapsulasi berarti sebuah class mengontrol cara datanya digunakan. Modifier visibilitas menentukan siapa yang dapat melihat member. private menyembunyikannya dari semua yang berada di luar class, sehingga method milik class itu sendiri menjadi satu-satunya cara untuk mengaksesnya:
class Account {
private var balance = 0
fun deposit(amount: Int) {
if (amount > 0) balance += amount
}
fun report() = "balance: $balance"
}Di dalam main:
val a = Account()
a.deposit(50)
a.deposit(-999)
println(a.report())
// a.balance = 1_000_000 // error: tidak dapat mengakses 'balance' karena bersifat privateOutput:
balance: 50Kotlin memiliki empat modifier. Tanpa modifier, deklarasi bersifat public, terlihat di mana saja:
public // default: terlihat di mana saja
internal // terlihat dalam module yang sama (app atau library)
protected // terlihat dalam class dan subclass-nya
private // terlihat di dalam class (atau file, untuk deklarasi tingkat teratas)Fungsi pembantu privat menjaga antarmuka publik tetap kecil. Pemanggil melihat apa yang dilakukan class, bukan bagaimana caranya:
class Password(private val text: String) {
val isStrong: Boolean
get() = hasDigit() && text.length >= 8
private fun hasDigit() = text.any { it.isDigit() }
}Di dalam main:
println(Password("secret123").isStrong)
println(Password("short1").isStrong)Output:
true
falseProperty constructor juga menggunakan modifier: private val menyimpan nilai yang tidak dapat dibaca oleh kode di luar class. Menyembunyikan data memungkinkan class memeriksa setiap perubahan dan menjaga aturannya:
class Locker(private val code: String) {
private val items = mutableListOf<String>()
fun store(item: String, code: String): Boolean {
if (code != this.code) return false
items.add(item)
return true
}
}Tantangan
MudahLengkapi class Locker(private val code: String). List items-nya bersifat privat. store(item, code) menambahkan item hanya jika kodenya cocok dan mengembalikan apakah item berhasil ditambahkan; open(code) mengembalikan item yang digabungkan dengan , (atau empty) jika kodenya cocok, dan wrong code jika tidak.
Kode yang disediakan membaca kode loker, lalu perintah put <code> <item> atau open <code>. Kode tersebut mencetak stored atau denied untuk setiap put, serta hasil dari setiap open.
Tulis kodemu di Locker.kt. Main.kt berisi kode input/output yang disediakan dan tidak dapat diedit.
Coba sendiri
fun main() {
// Kode input/output yang disediakan: biarkan apa adanya
val input = generateSequence(::readLine).toList()
val locker = Locker(input[0])
for (cmd in input.drop(1)) {
val p = cmd.split(" ")
if (p[0] == "put") println(if (locker.store(p[2], p[1])) "stored" else "denied")
else println(locker.open(p[1]))
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1class dan object
Bekerja dengan fileMendefinisikan classKonstruktor utamaBlok init dan validasiKonstruktor sekunderRingkasan: Kartu Perpustakaan2property dan Enkapsulasi
Accessor KustomModifier VisibilitasSetter Privatlazy dan lateinitRingkasan: Rekening Bank5Interface
Mendeklarasikan Interfacemethod DefaultBeberapa InterfaceInterface sebagai TipeUlasan: Metode Pembayaran11Proyek: Pengelolaan Perpustakaan
Buku dan AnggotaPeminjaman BukuLatihan sendiri: Playground Kotlin