Veri Sınıfları
Coddy'nin Kotlin Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 32 / 57.
Veri sınıfı, temel görevi veri tutmak olan bir sınıftır. data değiştiricisi, derleyicinin birincil kurucunun özelliklerinden toString(), equals(), hashCode(), copy() ve componentN() işlevlerini oluşturmasını sağlar:
data class Point(val x: Int, val y: Int)main içinde:
val a = Point(1, 2)
val b = Point(1, 2)
println(a)
println(a == b)
println(setOf(a, b).size)Çıktı:
Point(x=1, y=2)
true
1data olmadan println, sınıf adını ve Point@1b6d3586 gibi bir hash kodunu gösterir ve aynı değerlere sahip iki nesne eşit değildir. copy(), bazı özellikleri değiştirilmiş yeni bir nesne oluşturur ve orijinali olduğu gibi bırakır; bu nedenle val özelliklerine sahip bir data sınıfı değişmez bir değer olarak çalışır:
data class User(val name: String, val email: String, val admin: Boolean = false)main içinde:
val ada = User("Ada", "ada@example.com")
val boss = ada.copy(admin = true)
println(ada)
println(boss)
println(ada == boss)Çıktı:
User(name=Ada, email=ada@example.com, admin=false)
User(name=Ada, email=ada@example.com, admin=true)
falseYapısöküm bildirimleri bir nesneyi değişkenlere ayırır: val (x, y) = point, oluşturulan component1() ve component2() işlevlerini kurucunun sırasına göre çağırır. Bu işlem for döngülerinde ve lambda parametrelerinde de çalışır; _ ise bir özelliği atlar:
data class Score(val player: String, val points: Int, val level: Int)main içinde:
val scores = listOf(Score("ada", 120, 3), Score("bo", 95, 2))
for ((player, points) in scores) println("$player: $points")
val (_, bestPoints, bestLevel) = scores.maxBy { it.points }
println("best: $bestPoints at level $bestLevel")Çıktı:
ada: 120
bo: 95
best: 120 at level 3Yalnızca birincil kurucu özellikleri dikkate alınır: sınıf gövdesinde bildirilen bir özellik toString, equals, hashCode ve copy işlemlerine dahil edilmez. Bir veri sınıfının en az bir kurucu parametresi olmalıdır ve her parametre val veya var olmalıdır:
data class Reading(val sensor: String, val value: Int) {
var note = ""
}main içinde:
val r1 = Reading("t1", 20)
val r2 = Reading("t1", 20)
r1.note = "checked"
println(r1)
println(r1 == r2)Çıktı:
Reading(sensor=t1, value=20)
trueGörev
KolayBook'u bir data class yapın, böylece değere göre yazdırılsın ve karşılaştırılsın. Sonra üç fonksiyonu tamamlayın: parse(line) Dune;Herbert;1965'i bir Book'a dönüştürür, newEdition(book, year) yeni yılla ve başlığa eklenen (new edition) ile bir kopya döndürür ve describe(book) bir destructuring declaration kullanarak Dune by Herbert, 1965 döndürür.
Sağlanan kod her girdi satırını ayrıştırır, her kitabı, yinelenenlerin sayısını, ilk kitabın yeni baskısını (yıl 2024) ve her benzersiz kitabın bir açıklamasını yazdırır.
Kodunuz Book.kt ve BookTools.kt dosyalarına yazılır. Main.kt sağlanan girdi/çıktı kodunu tutar ve düzenlenemez.
Kendin dene
fun main() {
// Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
val input = generateSequence(::readLine).toList()
val books = input.map { parse(it) }
for (b in books) println(b)
println("duplicates: ${books.size - books.distinct().size}")
println(newEdition(books[0], 2024))
for (b in books.distinct()) println(describe(b))
}
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 Dizini7Özel Sınıflar
Veri SınıflarıEnum SınıflarıMühürlü Hiyerarşilerequals, hashCode, toStringTekrar - Sipariş Takipçisi2Ö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ç AlmaKendi başına pratik yap: Kotlin playground