init Blokları ve Doğrulama
Coddy'nin Kotlin Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 4 / 57.
Bir init bloğu, bir örnek oluşturulduğunda, kurucu parametreleri atandıktan hemen sonra çalışır. Tek bir özellik bildirimine sığmayan kurulum kodları için kullanılır:
class Order(val id: Int, items: List<Int>) {
val total: Int
val count: Int
init {
total = items.sum()
count = items.size
println("created order $id")
}
}main içinde:
val o = Order(7, listOf(4, 6, 10))
println("${o.count} items, total ${o.total}")Çıktı:
created order 7
3 items, total 20require(condition) { message } bir bağımsız değişkeni kontrol eder ve değer yanlış olduğunda mesajla birlikte IllegalArgumentException fırlatır. Bunu init içine koymak, geçersiz bir örneğin hiçbir zaman oluşturulamamasını sağlar:
class Percentage(val value: Int) {
init {
require(value in 0..100) { "percentage must be 0-100, was $value" }
}
}main içinde:
println(Percentage(42).value)
try {
Percentage(150)
} catch (e: IllegalArgumentException) {
println(e.message)
}Çıktı:
42
percentage must be 0-100, was 150Bir sınıfın birden fazla init bloğu olabilir; bunlar özellik başlatıcılarıyla birlikte yukarıdan aşağıya sırayla çalışır:
class Demo(name: String) {
val first = "first: $name".also { println(it) }
init { println("init 1") }
val second = "second".also { println(it) }
init { println("init 2") }
}main içinde:
Demo("x")
println("done")Çıktı:
first: x
init 1
second
init 2
doneinit içindeki doğrulama, kuralı verilerin yanında tutar. Bir örnek alan kod, tekrar kontrol etmeden ona güvenebilir:
class Email(val address: String) {
init {
require("@" in address) { "not an email: $address" }
}
}
fun send(to: Email) { /* adresi tekrar kontrol etmeye gerek yok */ }Görev
KolayPassword sınıfını tamamla. init bloğu, require ile text değerinin en az 8 karakter içerdiğini (mesaj too short) ve bir rakam içerdiğini (mesaj needs a digit) bu sırayla kontrol eder. strength özelliği init içinde hesaplanır: text ayrıca bir büyük harf içeriyorsa strong, aksi takdirde ok olur.
Sağlanan kod, her girdi satırı için bir Password oluşturur ve strength değerini veya hata mesajını yazdırır.
Kodun Password.kt dosyası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()
for (line in input) {
try {
println(Password(line).strength)
} catch (e: IllegalArgumentException) {
println(e.message)
}
}
}
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ç AlmaKendi başına pratik yap: Kotlin playground