Sınırlamalar
Değer sınıflarının yapamayacakları
Sınırlamalar, CoddyKit'te ücretsiz bir Kotlin Academy dersidir. Bu, 4 dersinin 4. 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.
Sınırları Bilmek
Değer sınıfları güçlüdür, ancak bazı kısıtlamaları vardır. Sınırlarını anlamak, doğru aracı seçmenize ve beklenmedik durumlardan kaçınmanıza yardımcı olur.
Tam Olarak Bir Özellik
Bir değer sınıfı tek bir değeri sarmalar. Birden fazla alanı gruplamak için normal bir sınıfa veya data class'a ihtiyacınız vardır.
// @JvmInline value class Range(val lo: Int, val hi: Int) // not allowed
data class Range(val lo: Int, val hi: Int)
fun main() {
println(Range(1, 10))
}Değer Dışında Başlatma Durumu Yok
Değer sınıfları, tek kurucu özelliği dışında destekleyen alanlara sahip olamaz. Destekleyen alanı olan ek bir var durumu kullanılamaz.
@JvmInline
value class Counter(val value: Int) {
// val cached: Int = value * 2 // not allowed: extra backing field
val doubled: Int get() = value * 2 // computed is fine
}
fun main() {
println(Counter(3).doubled)
}Kalıtım Yok
Değer sınıfları örtük olarak final olur. Başka sınıfları genişletemez ve başka sınıflar tarafından genişletilemezler. Yalnızca arayüzleri uygulayabilirler.
interface Named { val label: String }
@JvmInline
value class Tag(val text: String) : Named {
override val label: String get() = text
}
fun main() {
println(Tag("urgent").label)
}Kutulama Maliyetleri Geri Döner
Değer null alabilen, genel veya arayüz türü olarak kullanıldığında sıfır ek yük vaadi ortadan kalkar. Derleyici bu durumda değeri gerçek bir nesne içinde kutular.
@JvmInline
value class Id(val raw: Int)
fun main() {
val list: List<Id> = listOf(Id(1), Id(2)) // boxed inside the list
println(list.map { it.raw })
}Kimlik Yok
Değer sınıflarının kararlı bir referans kimliği yoktur. === ile referans eşitliği anlamsızdır ve nesne kimliğinin önemli olduğu yerlerde, örneğin eşzamanlama kilidi olarak kullanılamazlar.
@JvmInline
value class Code(val value: Int)
fun main() {
val a = Code(5)
val b = Code(5)
println(a == b) // structural equality works
}Geç Başlatma veya Özellik Delegasyonu Kullanılamaz
Temel değere lateinit uygulayamazsınız; ayrıca değer sınıfları tek alanlarında özellik delegasyonunu desteklemez. Değer kurucuda ayarlanmalıdır.
@JvmInline
value class Slug(val value: String)
fun main() {
val s = Slug("hello-world") // must be provided up front
println(s.value)
}JVM Ad Dönüşümü
JVM'de değer sınıfı parametreleri alan işlevlere, bayt kodunda çakışmaları önlemek için dönüştürülmüş adlar verilir. Bu durum Java ile birlikte çalışmayı zorlaştırır; Java çağıranları bu işlevleri düzgün biçimde göremeyebilir.
@JvmInline
value class Hz(val value: Int)
fun tune(freq: Hz) = freq.value
fun main() {
println(tune(Hz(440))) // simple from Kotlin; mangled from Java
}Birden Çok Alan İçeren Sarmalayıcılar İçin Değil
Kendinizi iki özellik olmasını dilerken buluyorsanız değer sınıfı yanlış araçtır. Daha zengin bir yapı karşılığında nesne ayırmayı kabul ederek bir data class kullanın.
data class Coordinate(val lat: Double, val lng: Double)
fun main() {
println(Coordinate(41.0, 29.0))
}Sınırlamaların Özeti
Değer sınıfları şunları yapamaz:
- Birden fazla özellik barındırmak
- Ek destekleyen alanlara veya
lateinit'e sahip olmak - Sınıflardan kalıtım almak veya sınıflara kalıtım vermek
- Referans kimliği sunmak
- Kutulamayı her zaman önlemek
Bilgece Seçim Yapma
Tek, doğrulanmış ve tür güvenli bir değer için değer sınıfı kullanın. Gruplanmış veriler için veri sınıfı kullanın. Güvenlik sağlamadan yalnızca okunabilirlik sunan durumlarda tür diğer adı kullanın. Her birinin kendine uygun yeri vardır.
Kısa Bir Kontrol
Değer sınıflarının sınırlamalarını ne kadar anladığınızı sınayın.
Özet
Değer sınıflarının sınırlamalarını öğrendiniz:
- Tek özellik ve ek destekleyen alanların olmaması
- Kalıtım ve kimlik olmaması
- Null alabilen, genel veya arayüz kullanımlarında kutulamanın geri dönmesi
- JVM ad dönüşümünün Java ile birlikte çalışmayı zorlaştırması
Aracı ihtiyaca göre seçin.
Sıkça Sorulan Sorular
“Sınırlamalar” dersi ücretsiz mi?
Evet — “Sınırlamalar” 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.
“Sınırlamalar” dersinde ne öğreneceğim?
Değer sınıflarının yapamayacakları 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 4. dersidir.
“Sınırlamalar” 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.