CodeBlanks Logo Icon CodeBlanks

@Optional

@Optional ve default değerlerle opsiyonel alan öğrenirsin.

@Optional nedir?

@Optional, bir özelliğin JSON'da olmaması durumunda varsayılan değerin kullanılmasını sağlayan annotation'dır. kotlinx.serialization kütüphanesinden gelir.

Örnek: @Serializable data class User(val name: String, @Optional val age: Int = 0). Bu sınıfta age JSON'da yoksa varsayılan olarak 0 alınır. Bu, eski JSON verisiyle uyumluluk için anlamlıdır; yeni alan eklendiğinde önceki JSON hâlâ çalışır. Modern Kotlin'de varsayılan değer tek başına yeter; @Optional açık işaret olarak kullanılır.

Uygulama @Optional ile varsayılan değer

@Serializable ile işaretli data class User(val name: String, @Optional val age: Int = 0) tanımla. main içinde println("User hazır") yazdır.

Başlangıç kodu

Main.kt
// Optional annotation
// buraya yaz
import kotlinx.serialization.Serializable
import kotlinx.serialization.Optional

fun main() {
    
}

Örnek çözüm

Main.kt
@Serializable
data class User(val name: String, @Optional val age: Int = 0)

fun main() {
    println("User hazır")
}

Beklenen çıktı

User hazır

Varsayılan değer davranışı

Bir özelliğin varsayılan değeri varsa, JSON bu alanı içermese bile sınıf yine de oluşturulur. @Optional bunu açıkça işaretler.

Örnek: data class User(val name: String, val age: Int = 18). {"name":"Ayşe"} JSON'ı başarıyla User(name="Ayşe", age=18) olarak okunur. encodeDefaults = false ise varsayılan değer JSON'a yazılmaz. encodeDefaults = true ise her zaman yazılır. Bu seçenek, JSON boyutunu küçültmek için anlamlıdır.

Soru ve cevaplar

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

1 @Optional hangi durumda kullanışlıdır?

  • JSON alanı her zaman doluysa
  • Json prettyPrint isteniyorsa
  • Sınıf sealed ise
  • Yeni alan eklenip eski JSON uyumu isteniyorsa Doğru cevap

Açıklama: @Optional geriye dönük uyumluluk için kullanışlıdır.

2 @Optional annotation adını tamamla

Soru
@Serializable
data class User(val name: String, @____ val age: Int = 0)
Cevap
@Serializable
data class User(val name: String, @Optional val age: Int = 0)

Açıklama: @Optional ile özellik opsiyonel işaretlenir.

3 @Optional parçalarını eşle

Kavram Anlamı
@Optional Opsiyonel işaret
varsayılan değer Eksik alanda kullanılır
encodeDefaults Yazma seçeneği
JSON Veri formatı

İleri seviye bölümündeki tüm dersler