@Optional
- Kotlin kursu
- İleri seviye
- Ders 28/83
- 5 dk
@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
// Optional annotation
// buraya yaz
import kotlinx.serialization.Serializable
import kotlinx.serialization.Optional
fun main() {
}Örnek çözüm
@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
@Serializable
data class User(val name: String, @____ val age: Int = 0)
@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ı |