0Pricing
Kotlin Academy · Ders

Arrow Raise DSL: Türü Belirlenmiş Hataları Birleştirme

Çoklu hata akışlarını temiz biçimde birleştirmek için Arrow'un Raise bağlamını ve raise() işlevini kullanın.

Arrow Raise DSL: Türü Belirlenmiş Hataları Birleştirme, CoddyKit'te ücretsiz bir Kotlin Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Kotlin Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Kotlin Academy kursu toplamda 4 dersten oluşur.

Either Zincirlemenin Sınırlılığı

Birden çok ardışık işlem olduğunda Either'ı flatMap ile zincirlemek, derin biçimde iç içe geçmiş anonim işlevler oluşturur. Arrow'un Raise DSL'i (Arrow 1.2'de tanıtılmıştır), Kotlin'in bağlam alıcılarını veya uzantı işlevlerini kullanarak daha temiz, eş yordam tarzı bir söz dizimi sunar.

Raise<E> Nedir?

Raise, E türünde bir hatayı yükseltebilen (akışı kısa devreye uğratabilen) bir bağlamdır. Başarısız olabilen bir işlev, hatayı fırlatmaya benzer şekilde iptal edip aktarmak için raise(error) çağrısını yapar; ancak istisnaları kullanmaz.

either { } Oluşturucusu

either { } oluşturucusu, kapsamında Raise bulunan bir bloktan Either oluşturur. İçeride başarısızlık için raise(error) çağrısını yapabilir veya başarı için doğrudan bir değer döndürebilirsiniz:

import arrow.core.raise.either
import arrow.core.raise.Raise

fun validateAge(age: Int): Either<String, Int> = either {
    if (age < 0) raise("Age cannot be negative")
    if (age > 150) raise("Age too large")
    age
}

bind() — either{} İçinde Either'ın Sarmalamasını Açma

Bir either { } bloğu içinde, herhangi bir Either değerinin sarmalamasını açmak için üzerinde .bind() çağrısını yapın. Değer bir Left ise bind() otomatik olarak hata yükseltir ve bloğu kısa devreye uğratır:

fun createUser(name: String, age: Int): Either<String, User> = either {
    val validName = validateName(name).bind()  // raises if Left
    val validAge  = validateAge(age).bind()    // raises if Left
    User(validName, validAge)                  // only reached if both succeed
}

ensure() — Satır İçi Koşul Denetimi

ensure(condition) { error }, if (!condition) raise(error) ifadesinin kısa biçimidir. Doğrulama mantığını kısa ve öz tutar:

fun validateEmail(email: String): Either<String, String> = either {
    ensure(email.contains("@")) { "Email must contain @" }
    ensure(email.length <= 255) { "Email too long" }
    email
}

ensureNotNull() — Raise ile Boş Değer Denetimi

ensureNotNull(value) { error }, boş değer alabilen bir değerin sarmalamasını açar; değer boşsa hata yükseltir:

fun findUser(id: Long, repo: UserRepo): Either<UserError, User> = either {
    ensureNotNull(repo.findById(id)) { UserError.NotFound(id) }
}

Bağlam Alıcılarıyla Raise (Arrow 1.2+)

İşlevleri either { } içine sarmalamadan, doğrudan bir Raise bağlamı gerektirecek şekilde bildirebilirsiniz:

context(Raise<String>)
fun requirePositive(n: Int): Int {
    ensure(n > 0) { "Must be positive" }
    return n
}

// Called inside either { }
val result = either { requirePositive(-1) }  // Left("Must be positive")

zipOrAccumulate ile Hataları Biriktirme

Varsayılan olarak Raise ilk hatada kısa devre yapar. Birden çok doğrulamayı çalıştırmak ve tüm hataları bir NonEmptyList içinde toplamak için zipOrAccumulate() kullanın:

val result: Either<NonEmptyList<String>, User> = either {
    zipOrAccumulate(
        { validateName(name).bind() },
        { validateAge(age).bind() }
    ) { validName, validAge -> User(validName, validAge) }
}

recover { } — Belirli Hataları Ele Alma

Belirli bir yükseltilmiş hatayı ele almak, varsayılan bir değer sağlamak ve hesaplamayı sürdürmek için either { } içinde recover { error -> ... } kullanın:

val name: String = either {
    findUser(0L).bind().name
}.recover { error ->
    if (error == UserError.NotFound) "Guest" else raise(error)
}.getOrNull() ?: "Guest"

Raise ve Either Zincirleme: Hangisi Ne Zaman Kullanılmalı

Birden çok ardışık adımdan oluşan doğrusal akışlarda either { }.bind() kullanın; bu yaklaşım, işlevsel kalırken zorunlu programlama kodu gibi okunur. Kısa, iki adımlı birleştirmelerde veya diğer işlevsel kütüphanelerle birleştirirken flatMap zincirlemesini kullanın.

Raise Tabanlı İşlevleri Sınama

İşlevi either { } içinde çağırarak ve sonuç üzerinde doğrulama yaparak sınayın. Arrow'un shouldBeLeft() ve shouldBeRight() Kotest eşleştiricileri doğrulamaları kısa ve öz hâle getirir:

import arrow.core.shouldBeLeft
import arrow.core.shouldBeRight

@Test
fun `negative age returns Left`() {
    validateAge(-1).shouldBeLeft()
}

@Test
fun `valid age returns Right`() {
    validateAge(25).shouldBeRight(25)
}

Kısa Kontrol

Bir either { } bloğu içinde Either.Left değeri üzerinde .bind() çağrısı yapmak ne yapar?

Özet: Arrow Raise DSL

Önemli çıkarımlar:

  • either { }, kapsamında Raise bulunan bir bloktan Either oluşturur
  • .bind(), Either'ın sarmalamasını açar; Left durumunda kısa devre yapar
  • Satır içi denetimler için ensure(condition) { error } ve ensureNotNull(value) { error }
  • Kısa devre yapmak yerine birden çok hatayı toplamak için zipOrAccumulate()
  • Tamamen işlevsel kalırken zorunlu programlama kodu gibi okunur

Sıkça Sorulan Sorular

“Arrow Raise DSL: Türü Belirlenmiş Hataları Birleştirme” dersi ücretsiz mi?

Evet — “Arrow Raise DSL: Türü Belirlenmiş Hataları Birleştirme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Kotlin Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Kotlin Academy kursu toplamda 4 dersten oluşur.

“Arrow Raise DSL: Türü Belirlenmiş Hataları Birleştirme” dersinde ne öğreneceğim?

Çoklu hata akışlarını temiz biçimde birleştirmek için Arrow'un Raise bağlamını ve raise() işlevini kullanın. Kotlin Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Kotlin Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Kotlin Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“Arrow Raise DSL: Türü Belirlenmiş Hataları Birleştirme” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Kotlin Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Kotlin Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Either : İstisnasız Türlendirilmiş Hata İşleme
  2. Arrow Raise DSL: Türü Belirlenmiş Hataları Birleştirme
  3. Option ve Nullable: Hangisi Ne Zaman Kullanılır
  4. Arrow'un Temel Türleriyle İşlevsel Alan Modellemesi
← Kotlin Academy Sayfasına Dön