CodeBlanks Logo Icon CodeBlanks

Sealed ve result

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

Main.kt
// 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

Main.kt
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

Soru
data class Failure(val reason: String) : ____()
Cevap
data class Failure(val reason: String) : Result()

Açıklama: Failure, Result sealed class'ına miras verir.

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