Sealed ve result
- Kotlin kursu
- Orta seviye
- Ders 28/116
- 5 dk
Sealed class ile Result benzeri desen öğrenirsin.
Result pattern
Bir işlem sonucunu taşımak için sealed class ile Result kalıbı kurulabilir. Bu kalıp başarı ve başarısızlık durumlarını ayrı tiplerle ifade eder.
Örnek: sealed class Result; data class Success(val value: String) : Result(); data class Failure(val reason: String) : Result(). Bir fonksiyon Result döndürür; çağıran when ile iki durumu da ele alır. Bu, istisna fırlatmak yerine sonucu açıkça taşımayı tercih eden API'lerde yaygındır. Hata durumu artık bir veridir; kontrol akışı bozulmaz.
Success ve Failure
Result kalıbında Success başarılı değeri, Failure başarısızlık nedenini taşır. Her ikisi de data class'tır; kendi alanlarına sahiptir.
Örnek: fun handle(r: Result): String = when (r) { is Success -> "tamam: ${r.value}"; is Failure -> "hata: ${r.reason}" }. is Success dalında r.value, is Failure dalında r.reason smart cast ile erişilir. Bu, başarılı ve başarısız durumları aynı fonksiyonda, tek bir dönüş türüyle işler. İstisna yönetimine göre daha açık ve hatasızdır.
Uygulama Result sealed class'ı ve handle fonksiyonu
Result adında bir sealed class tanımla. İki data class alt tip ekle: Success(val value: String) ve Failure(val reason: String); her ikisi de Result()'a miras versin. handle(r: Result): String fonksiyonu yaz; gövdesi when (r) ile Success için "tamam: ${r.value}", Failure için "hata: ${r.reason}" döndürsün. main içinde Success("200") örneği oluştur ve handle sonucunu yazdır.
Başlangıç kodu
// Result sealed class tanımı
// data class Success ve Failure alt tipleri
// handle fonksiyonu: when ile dallanma
// main'de Success örnekle, handle yazdırÖrnek çözüm
sealed class Result
data class Success(val value: String) : Result()
data class Failure(val reason: String) : Result()
fun handle(r: Result): String {
return when (r) {
is Success -> "tamam: ${r.value}"
is Failure -> "hata: ${r.reason}"
}
}
fun main() {
val r: Result = Success("200")
println(handle(r))
}Beklenen çıktı
tamam: 200
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Bir <code>sealed class Result</code> ve <code>data class Success(val value: String) : Result()</code> tanımlı. Bir fonksiyon <code>Result</code> döndürüyorsa ne yapar?
- Başarı veya başarısızlık durumunu taşır Doğru cevap
- Her zaman Success döndürür
- Çalışma zamanı hatası fırlatır
- Yalnızca bir String döndürür
Açıklama: Result, başarı veya başarısızlık durumunu taşır.
2 Result kalıbını eşle
| Kavram | Anlamı |
|---|---|
sealed class Result |
Kapalı üst sınıf |
data class Success |
Başarı durumu |
data class Failure |
Başarısızlık durumu |
when (r) |
Sonuca göre dal |
3 Result alt tip tanımını tamamla
data class Failure(val reason: String) : ____()
data class Failure(val reason: String) : Result()
Açıklama: Failure, Result sealed class'ına miras verir.