Satır İçi Değer Sınıfları
Ek yük olmadan sarmalayın
Satır İçi Değer Sınıfları, CoddyKit'te ücretsiz bir Kotlin Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Kotlin Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Kotlin Academy kursu toplamda 4 dersten oluşur.
Sarmalama Sorunu
İlkel bir türü sınıf içinde sarmalamak tür güvenliği sağlar, ancak normalde öbekte bellek ayırma maliyeti oluşturur. Değer sınıfları, derleyici mümkün olduğunda sarmalayıcıyı ortadan kaldırırken size bu güvenliği sağlar.
Değer Sınıfı Tanımlama
Bir sınıfı, birincil kurucusunda tam olarak bir özellik bulunan @JvmInline value class olarak işaretleyin. Bu sınıf, ayrı bir tür gibi davranır.
@JvmInline
value class Password(val value: String)
fun main() {
val p = Password("secret")
println(p.value)
}Ayrı Bir Tür
Tür diğer adının aksine değer sınıfı ayrı bir türdür. Password beklenen yerde yanlışlıkla ham bir String aktaramazsınız.
@JvmInline
value class Password(val value: String)
fun login(p: Password) = println("login with " + p.value)
fun main() {
login(Password("hunter2"))
}Sıfır Ek Yük
Çalışma zamanında derleyici genellikle temel değeri satır içine alır; böylece ek nesne ayırma işlemi yapılmaz. Çoğu kod yolunda bir Password, düz bir String olarak temsil edilir.
@JvmInline
value class Meters(val amount: Double)
fun main() {
val d = Meters(5.0)
println(d.amount) // stored inline as a Double
}Yöntemler ve Özellikler
Değer sınıfları, normal sınıflar gibi işlevlere ve hesaplanan özelliklere sahip olabilir.
@JvmInline
value class Celsius(val degrees: Double) {
fun toFahrenheit() = degrees * 9 / 5 + 32
}
fun main() {
println(Celsius(100.0).toFahrenheit())
}Doğrulama İçin init Blokları
Bir init bloğu, sarılan değeri oluşturulurken doğrulamanızı ve böylece her örneğin geçerli olmasını garanti etmenizi sağlar.
@JvmInline
value class Percentage(val value: Int) {
init {
require(value in 0..100) { "out of range" }
}
}
fun main() {
println(Percentage(75).value)
}Hesaplanan Özellikler
Tek saklanan değerden türetilen hesaplanan özellikler ekleyerek mantığı türe yakın tutabilirsiniz.
@JvmInline
value class Seconds(val value: Int) {
val asMinutes: Double get() = value / 60.0
}
fun main() {
println(Seconds(120).asMinutes)
}Arayüzleri Uygulama
Değer sınıfları arayüzleri uygulayabilir ve çok biçimli kullanıma olanak tanır. Not: Değer sınıfı arayüz türü olarak ele alındığında kutulama zorunlu hâle gelebilir.
interface Describable {
fun describe(): String
}
@JvmInline
value class Money(val cents: Int) : Describable {
override fun describe() = "$" + cents / 100.0
}
fun main() {
println(Money(1599).describe())
}Kutulama Ne Zaman Gerçekleşir
Değer, null değer alabilen bir tür, arayüz veya genel bir koleksiyon içinde kullanıldığında sarmalayıcı yeniden ortaya çıkar (kutulama gerçekleşir). Bu durumlarda derleyici gerçek bir nesne oluşturur; bu hâlâ doğrudur, yalnızca daha az verimlidir.
@JvmInline
value class Id(val raw: Int)
fun main() {
val direct = Id(1) // inlined
val boxed: Id? = Id(2) // boxed because nullable
println("" + direct.raw + " " + boxed?.raw)
}Değer Sınıfı ve Veri Sınıfı
Bir data class her zaman nesne ayırır ve birçok özellik barındırabilir. Bir value class tam olarak bir özellik barındırır ve sıfır ek yük hedefler. Tek bir değer etrafında ince, tür güvenli sarmalayıcılar için değer sınıflarını seçin.
Neden Önemli
Değer sınıfları şunları yapmanızı sağlar:
- Aynı türdeki parametrelerin birbirine karıştırılmasını önlemek
- Bir ilkel değere doğrulama eklemek
- Çalışma zamanında genellikle hiçbir maliyet ödememek
Tür diğer adlarının yetersiz kaldığı yerlerde değer sınıfları, tür güvenli bir çözümdür.
Kısa Bir Kontrol
Satır içi değer sınıflarını ne kadar anladığınızı sınayın.
Özet
Satır içi değer sınıflarını öğrendiniz:
- Tek özellik içeren
@JvmInline value classile tanımlanırlar - Genellikle sıfır ek yüke sahip ayrı bir türdür
- Yöntemleri, hesaplanan özellikleri ve
initdoğrulamasını desteklerler - Değer null alabilen, genel veya arayüz olarak kullanıldığında kutulama gerçekleşir
Sırada: gerçek dünya kullanım alanları.
Sıkça Sorulan Sorular
“Satır İçi Değer Sınıfları” dersi ücretsiz mi?
Evet — “Satır İçi Değer Sınıfları” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Kotlin Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Kotlin Academy kursu toplamda 4 dersten oluşur.
“Satır İçi Değer Sınıfları” dersinde ne öğreneceğim?
Ek yük olmadan sarmalayın Kotlin Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Kotlin Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Kotlin Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Satır İçi Değer Sınıfları” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Kotlin Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Kotlin Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Tür Takma Adları
- Satır İçi Değer Sınıfları
- Kullanım Alanları
- Sınırlamalar