Ekspresi Object
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Kotlin di Coddy. Pelajaran 15 dari 57.
Ekspresi object membuat object satu kali dari class tanpa nama, tepat di tempat object itu diperlukan. Ekspresi ini ditulis object : Type { ... } dan biasanya mengimplementasikan sebuah antarmuka. Antarmuka mencantumkan method tanpa menjelaskan cara kerjanya. Bab 5 membahas antarmuka secara mendalam:
interface Greeter {
fun greet(name: String): String
}Di dalam main:
val polite = object : Greeter {
override fun greet(name: String) = "Good morning, $name."
}
println(polite.greet("Ada"))Output:
Good morning, Ada.Deklarasi object hanya ada satu kali. Ekspresi object dievaluasi setiap kali kodenya dijalankan, dan setiap kali dijalankan, ekspresi tersebut membuat object baru. Ekspresi tersebut dapat membaca dan mengubah variabel lokal di sekitarnya:
interface Counter {
fun next(): Int
}
fun counterFrom(start: Int): Counter {
var current = start
return object : Counter {
override fun next() = current++
}
}Di dalam main:
val a = counterFrom(10)
val b = counterFrom(1)
println("${a.next()} ${a.next()} ${b.next()}")Output:
10 11 1Salah satu penggunaan umum adalah menyerahkan perilaku kepada fungsi library. sortedWith menerima Comparator, sebuah interface yang method compare(a, b)-nya mengembalikan angka negatif jika a berada lebih dulu, nol jika seri, dan angka positif jika tidak:
Di dalam main:
val words = listOf("kiwi", "fig", "banana", "apple")
val byLength = object : Comparator<String> {
override fun compare(a: String, b: String) = a.length - b.length
}
println(words.sortedWith(byLength))Output:
[fig, kiwi, apple, banana]Ekspresi object tanpa supertipe mengelompokkan beberapa nilai ke dalam object lokal. Property-nya dapat digunakan di dalam fungsi yang sama. Jika interface memiliki satu method, lambda biasanya lebih singkat daripada ekspresi object. Ekspresi object cocok digunakan jika ada beberapa method atau state yang perlu disimpan.
val size = object {
val width = 3
val height = 4
}
println(size.width * size.height) // 12
val byLength = Comparator<String> { a, b -> a.length - b.length } // bentuk lambdaTantangan
MudahInterface Validator memiliki satu method, check(text), yang mengembalikan pesan error atau null jika teks lolos pemeriksaan. Lengkapi fungsi rules(minLength) agar mengembalikan tiga validator yang dibuat dengan ekspresi object, dengan urutan berikut: teks harus memiliki setidaknya minLength karakter (too short), berisi satu digit (needs a digit), dan tidak berisi spasi (no spaces allowed).
Kode yang disediakan membaca panjang minimum, lalu satu password per baris. Kode tersebut mencetak ok, atau semua pesan error untuk password tersebut yang digabungkan dengan ; .
Tulis kodemu di Rules.kt dan Validator.kt. Main.kt berisi kode input/output yang disediakan dan tidak boleh diedit.
Coba sendiri
fun main() {
// Kode input/output yang disediakan: biarkan apa adanya
val input = generateSequence(::readLine).toList()
val checks = rules(input[0].toInt())
for (password in input.drop(1)) {
val problems = checks.mapNotNull { it.check(password) }
println(if (problems.isEmpty()) "ok" else problems.joinToString("; "))
}
}
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 Buku3Objek dan Companion Object
Deklarasi ObjectCompanion ObjectKonstanta dengan constEkspresi ObjectUlasan: Loket TiketLatihan sendiri: Playground Kotlin