Monad
- Kotlin kursu
- İleri seviye
- Ders 53/83
- 5 dk
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
// 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
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
val r = Result.success(10).____ { it * 3 }
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.