Setter Privat
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Kotlin di Coddy. Pelajaran 9 dari 57.
Sering kali, kode di luar sebaiknya hanya membaca property, bukan mengubahnya. private set membuat getter tetap publik dan hanya setter yang bersifat privat:
class Counter {
var count = 0
private set
fun increment() {
count++
}
}Di dalam main:
val c = Counter()
c.increment()
println(c.count)
// c.count = 99 // error: setter bersifat privateOutput:
1Cara ini cocok untuk nilai yang hanya boleh berubah melalui sebuah aturan, seperti skor yang hanya bertambah melalui penghargaan yang valid:
class Player(val name: String) {
var score = 0
private set
private val _history = mutableListOf<Int>()
val history: List<Int> get() = _history
fun award(points: Int) {
if (points <= 0) return
score += points
_history.add(points)
}
}Di dalam main:
val p = Player("Ada")
p.award(10)
p.award(-5)
p.award(3)
println(p.score)
println(p.history)Output:
13
[10, 3]history di atas menunjukkan pola umum: MutableList privat di dalam class, yang ditampilkan sebagai List hanya-baca. Pemanggil dapat membaca item, tetapi tidak memiliki add atau remove untuk mengubahnya:
private val _items = mutableListOf<String>()
val items: List<String> get() = _items // tampilan hanya-baca
// di luar: items.add("x") // error: List tidak memiliki addval tidak pernah berubah setelah dibuat, bahkan di dalam class. var dengan private set tetap bisa diubah hanya di dalam class. Pilih val untuk nilai yang tetap sepanjang masa hidup object:
class Order(val id: Int) { // tidak pernah berubah
var status = "new"
private set // berubah, tetapi hanya di dalam Order
fun ship() { status = "shipped" }
}Tantangan
MudahLengkapi class Elevator(val topFloor: Int). floor dan trips dapat dibaca dari luar, tetapi hanya dapat diubah di dalam class (private set). goTo(target) berpindah antara lantai 0 dan topFloor: perpindahan yang valid ke lantai berbeda akan memperbarui floor, menambahkan 1 ke trips, dan mengembalikan true; perpindahan yang tidak valid atau ke lantai yang sama akan mengembalikan false.
Code yang disediakan membaca lantai teratas, lalu lantai tujuan. Code tersebut mencetak floor 3 setelah perpindahan atau stay 3 jika perpindahan ditolak, lalu mencetak trips: beserta jumlahnya.
Letakkan kodemu di Elevator.kt. Main.kt berisi code 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 lift = Elevator(input[0].toInt())
for (line in input.drop(1)) {
val moved = lift.goTo(line.toInt())
println("${if (moved) "floor" else "stay"} ${lift.floor}")
}
println("trips: ${lift.trips}")
}
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