IO'da Hata İşleme
handleError
IO'da Hata İşleme, CoddyKit'te ücretsiz bir Scala for Backend Engineering & Functional Programming dersidir. Bu, 4 dersinin 4. 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, Scala for Backend Engineering & Functional Programming öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Scala for Backend Engineering & Functional Programming kursu toplamda 4 dersten oluşur.
Değer Olarak Hatalar
Cats Effect'te bir IO başarısız olabilir. Hata değerin bir parçasıdır; böylece yapılandırılmamış try/catch kullanmadan hatayı inceleyebilir ve kurtarabilirsiniz.
Hata Yükseltme
Seçtiğiniz bir özel durumla açıkça başarısız bir IO oluşturmak için IO.raiseError kullanın.
import cats.effect.IO
val failed: IO[Int] =
IO.raiseError(new RuntimeException("boom"))handleError
handleError, hatadan hesaplanan bir yedek değer sağlayarak başarısız bir IO işleminden kurtulur. Sonuç, bu noktada başarısız olamayacak bir IO olur.
import cats.effect.IO
val safe: IO[Int] =
IO.raiseError[Int](new RuntimeException("x"))
.handleError(_ => -1)handleErrorWith
handleErrorWith, başka bir IO ile kurtarma sağlar; böylece yedek işlemin kendisi de etkili olabilir (örneğin günlük kaydı tutabilir, yeniden deneyebilir veya varsayılan bir değer döndürebilir).
import cats.effect.IO
val recovered: IO[Int] =
IO(throw new RuntimeException("fail"))
.handleErrorWith(e => IO.println(s"caught: ${e.getMessage}").as(0))attempt
attempt, IO[A] değerini IO[Either[Throwable, A]] değerine dönüştürür ve hatayı değer içinde somutlaştırarak üzerinde desen eşleştirmesi yapmanızı sağlar.
import cats.effect.IO
val e: IO[Either[Throwable, Int]] =
IO.raiseError[Int](new RuntimeException("oops")).attemptattempt ile Desen Eşleştirme
attempt sonrasında, Either üzerinde normal bir flatMap kullanarak başarı veya başarısızlık durumuna göre dallanabilirsiniz.
import cats.effect.IO
val prog: IO[Unit] = IO(10 / 2).attempt.flatMap {
case Right(v) => IO.println(s"ok: $v")
case Left(e) => IO.println(s"err: ${e.getMessage}")
}redeem
redeem, her iki dalı tek çağrıda işler: biri hata, diğeri başarı için olmak üzere iki işlev alır ve her ikisi de yalın bir değer döndürür.
import cats.effect.IO
val label: IO[String] =
IO(42).redeem(e => s"failed: $e", v => s"value: $v")redeemWith
redeemWith, redeem gibidir; ancak her dal bir IO döndürür ve hem başarıyı hem de başarısızlığı etkili biçimde işlemenize olanak tanır.
import cats.effect.IO
val prog: IO[Unit] = IO(42).redeemWith(
e => IO.println(s"err: $e"),
v => IO.println(s"got: $v")
)guarantee ile Temizleme
guarantee, etki başarılı da olsa başarısız da olsa bir sonlandırıcı çalıştırır; bu, kaynakları serbest bırakmak veya tamamlanma günlüğü tutmak için idealdir.
import cats.effect.IO
val prog: IO[Int] =
IO(compute()).guarantee(IO.println("done"))
def compute(): Int = 7Başarısızlık Durumunda Yeniden Deneme
handleErrorWith ile özyinelemeli olarak kurtarma yapıp sayaç sıfıra ulaşana kadar azaltarak basit bir yeniden deneme mekanizması oluşturabilirsiniz.
import cats.effect.IO
def retry[A](io: IO[A], n: Int): IO[A] =
if (n <= 0) io
else io.handleErrorWith(_ => retry(io, n - 1))Düz Scala try/catch
Bunu düz Scala'daki klasik, hemen çalışan hata işleme yaklaşımıyla karşılaştırın. IO birleştiricileri aynı güvenliği, birleştirilebilir ve saf değerler olarak sağlar.
object Main {
def main(args: Array[String]): Unit = {
val result = try { 10 / 0 } catch { case _: ArithmeticException => -1 }
println(s"result: $result")
}
}Hızlı Kontrol
Hangi yöntem IO[A] değerini IO[Either[Throwable, A]] değerine dönüştürür?
Özet
IO içindeki hataları şu işlemlerle yönettiniz:
- Açıkça başarısız olmak için
raiseError - Kurtarma için
handleError/handleErrorWith Eitherdeğerini somutlaştırmak içinattempt- Her iki dalı işlemek için
redeem/redeemWith - Temizleme için
guarantee
Cats ve IO kursunu tamamladınız.
Sıkça Sorulan Sorular
“IO'da Hata İşleme” dersi ücretsiz mi?
Evet — “IO'da Hata İşleme” 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 Scala for Backend Engineering & Functional Programming kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Scala for Backend Engineering & Functional Programming kursu toplamda 4 dersten oluşur.
“IO'da Hata İşleme” dersinde ne öğreneceğim?
handleError Scala for Backend Engineering & Functional Programming 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.
Scala for Backend Engineering & Functional Programming öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Scala for Backend Engineering & Functional Programming, 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 4. dersidir.
“IO'da Hata İşleme” 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 Scala for Backend Engineering & Functional Programming dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Scala for Backend Engineering & Functional Programming 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
- Cats Tür Sınıfları
- IO Monad'ı
- IO Birleştirme
- IO'da Hata İşleme