CodeBlanks Logo Icon CodeBlanks

Type safety

value class ile type safety öğrenirsin.

Tür güvenliği

Value class'ın temel amacı tür güvenliğidir. UserId ve OrderId ikisi de String sarmalasa da farklı türlerdir. fun findUser(id: UserId) bildirimi, yanlışlıkla OrderId geçmeyi derleme hatası yapar.

Aynı String türünü her yerde kullanmak karışıklığa açıktır: bir fonksiyon hem kullanıcı hem sipariş numarası bekliyorsa hangisini verdiğinizi derleyici bilemez. Value class bu riski ortadan kaldırır. Çalışma zamanında ek bellek yok; yalnızca derleme zamanında denetim yapılır.

Çalışma zamanı temsili

Value class çalışma zamanında kutulama olmadan temsil edilir. UserId("U1") aslında bellekte yalnızca String "U1" olarak saklanır; sarmalayıcı nesne oluşmaz. Bu, value class'ı sıfır ek yükle donatır.

Ancak value class bir Any'ye atandığında veya jenerik koleksiyona eklendiğinde kutulama oluşabilir. Bu nadir durumlarda value class yine de String göre daha az ek yüktür. Çoğu kullanımda value class, String kadar hızlıdır ama tür güvenliği sağlar.

Uygulama UserId ve OrderId ile tür güvenliği

@JvmInline value class UserId(val id: String) ve @JvmInline value class OrderId(val id: String) tanımla. fun findUser(id: UserId) = println("User: ${id.id}") yaz. main içinde findUser(UserId("U1")) çağır.

Başlangıç kodu

Main.kt
// UserId ve OrderId değer sınıflarını tanımla
// findUser(id: UserId) metodu yaz

fun main() {
    // findUser'a UserId örneği gönder
}

Örnek çözüm

Main.kt
@JvmInline
value class UserId(val id: String)
@JvmInline
value class OrderId(val id: String)

fun findUser(id: UserId) = println("User: ${id.id}")

fun main() {
    findUser(UserId("U1"))
}

Beklenen çıktı

User: U1

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 findUser imzasını tamamla

Soru
fun findUser(id: ____) { /* ... */ }
Cevap
fun findUser(id: UserId) { /* ... */ }

Açıklama: findUser yalnızca UserId kabul eder.

2 tür güvenliği kavramlarını eşle

Kavram Anlamı
UserId vs String Farklı türler
no boxing Sıfır ek yük
compile-time Derleme denetimi
runtime Temel tür

3 String yerine value class neden kullanılır?

  • Daha hızlı çalışır
  • Daha az kod yazılır
  • Daha az bellek kullanır
  • Tür güvenliği sağlar Doğru cevap

Açıklama: value class tür karışıklığını derleme hatası yapar.

Orta seviye bölümündeki tüm dersler