Nesne İfadeleri
Coddy'nin Kotlin Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 15 / 57.
Bir nesne ifadesi, ihtiyaç duyulduğu yerde, adı olmayan bir sınıfın tek seferlik bir nesnesini oluşturur. object : Type { ... } şeklinde yazılır ve genellikle bir arayüzü uygular. Bir arayüz, nasıl çalıştıklarını belirtmeden yöntemleri listeler; 5. bölümde arayüzler ayrıntılı olarak ele alınır:
interface Greeter {
fun greet(name: String): String
}main içinde:
val polite = object : Greeter {
override fun greet(name: String) = "Good morning, $name."
}
println(polite.greet("Ada"))Çıktı:
Good morning, Ada.Bir nesne bildirimi bir kez var olur. Bir nesne ifadesi, kodu her çalıştığında değerlendirilir ve her çalıştırma yeni bir nesne oluşturur. Çevresindeki yerel değişkenleri okuyabilir ve değiştirebilir:
interface Counter {
fun next(): Int
}
fun counterFrom(start: Int): Counter {
var current = start
return object : Counter {
override fun next() = current++
}
}main içinde:
val a = counterFrom(10)
val b = counterFrom(1)
println("${a.next()} ${a.next()} ${b.next()}")Çıktı:
10 11 1Yaygın bir kullanım, davranışı bir kütüphane işlevine vermektir. sortedWith, Comparator alır; bu, compare(a, b) yöntemi a önce geldiğinde negatif bir sayı, eşitlik durumunda sıfır ve diğer durumlarda pozitif bir sayı döndüren bir arayüzdür:
main içinde:
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))Çıktı:
[fig, kiwi, apple, banana]Bir üst türü olmayan nesne ifadesi, birkaç değeri yerel bir nesnede gruplandırır; özellikleri aynı işlev içinde kullanılabilir. Bir arayüzün tek bir yöntemi olduğunda, lambda ifadesi genellikle bir nesne ifadesinden daha kısadır. Birden fazla yöntem veya saklanacak bir durum olduğunda nesne ifadeleri uygundur.
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 } // lambda formuGörev
KolayValidator arabiriminin, bir hata mesajı döndüren veya metin doğrulamadan geçtiğinde null döndüren check(text) adlı bir yöntemi vardır. İşlevi rules(minLength), nesne ifadeleriyle oluşturulan üç doğrulayıcıyı şu sırayla döndürecek şekilde tamamlayın: metin en az minLength karakter içermeli (too short), bir rakam içermeli (needs a digit) ve boşluk içermemelidir (no spaces allowed).
Sağlanan kod, minimum uzunluğu ve ardından her satırda bir parola okur. ok yazdırır veya o parolanın tüm hata mesajlarını ; ile birleştirerek yazdırır.
Kodunuz Rules.kt ve Validator.kt dosyalarına yazılmalıdır. Main.kt, sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.
Kendin dene
fun main() {
// Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
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("; "))
}
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama bölümündeki tüm dersler
1Sınıflar ve Nesneler
Dosyalarla ÇalışmaSınıfları TanımlamaBirincil Yapıcılarinit Blokları ve Doğrulamaİkincil YapıcılarTekrar - Kütüphane Kartı4Kalıtım
Açık Sınıflar ve Alt SınıflarÜyeleri Geçersiz Kılmasuper ve YapıcılarSoyut SınıflarTekrar - Personel Dizini2Özellikler ve Kapsülleme
Özel ErişimcilerGörünürlük DeğiştiricileriÖzel Setter'larlazy ve lateinitTekrar - Banka Hesabı5Arayüzler
Arayüz BildirimleriVarsayılan MetotlarBirden Çok ArayüzTür Olarak ArayüzlerÖzet - Ödeme Yöntemleri8Generic'ler
Generic FonksiyonlarGeneric SınıflarTür Kısıtlamalarıin ve out ile VaryansTekrar - Öncelik Kuyruğu11Proje: Kütüphane Yönetimi
Kitaplar ve ÜyelerKitap Ödünç Alma3Nesneler ve Eşlikçiler
Nesne BildirimleriEşlikçi Nesnelerconst ile SabitlerNesne İfadeleriTekrar - Bilet GişesiKendi başına pratik yap: Kotlin playground