CodeBlanks Logo Icon CodeBlanks

Monad

Result ve Either benzeri monad desenlerini öğrenirsin.

Monad: Result ve Either

Bir monad, bir değeri bir bağlam içine sarıp zincirlenebilir işlemler sağlar. Kotlin'de Result<T> başarılı ya da başarısız sonucu sarar. Either<L, R> (Arrow kütüphanesi) iki olası türü temsil eder.

Örnek: Result.of { 10 / 2 }.map { it * 3 }. Hata durumunda zincir kısa devre yapar. Result, exception fırlatmak yerine tip güvenli hata yönetimi sağlar. Bu kalıp, hataları değer olarak ele alır; yan etkileri azaltır.

Result.success ve failure

Result.success(v) başarılı bir sonuç, Result.failure(e) başarısız bir sonuç oluşturur. getOrNull() değeri ya da null döndürür; getOrElse bir varsayılan verir.

Örnek: val r: Result<Int> = Result.success(5); val v = r.getOrNull(). Hata durumunda getOrNull null döner. fold ile her iki durumu ayrı lambdalarla ele alırsın. Bu kalıp, hataları açıkça yönetir.

Uygulama Result ile güvenli bölme

safeDiv(a: Int, b: Int): Result<Int> fonksiyonu tanımla; b 0 ise Result.failure(ArithmeticException()), değilse Result.success(a / b) döndürsün. main içinde safeDiv(10, 2).getOrNull() sonucunu println ile yazdır.

Başlangıç kodu

Main.kt
// safeDiv fonksiyonu: b 0 ise failure, değilse success döndürür
// main'de safeDiv(10, 2) sonucunu getOrNull ile al ve yazdır

Örnek çözüm

Main.kt
fun safeDiv(a: Int, b: Int): Result<Int> {
    return if (b == 0) Result.failure(ArithmeticException())
    else Result.success(a / b)
}

fun main() {
    println(safeDiv(10, 2).getOrNull())
}

Beklenen çıktı

5

Soru ve cevaplar

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

1 Result.map çağrısını tamamla

Soru
val r = Result.success(10).____ { it * 3 }
Cevap
val r = Result.success(10).map { it * 3 }

Açıklama: Result.map başarılı değeri dönüştürür.

2 Monad parçalarını eşle

Kavram Anlamı
Result<T> Bağlam
map { } Dönüşüm
success(v) Başarılı durum
getOrNull() Değer veya null

3 Result.failure(e) neyi temsil eder?

  • Başarılı değeri
  • Null değeri
  • Boş listeyi
  • Başarısız durumu Doğru cevap

Açıklama: Result.failure bir hatayı sarar.

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