0Pricing
Scala for Backend Engineering & Functional Programming · Ders

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")).attempt

attempt 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 = 7

Baş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
  • Either değerini somutlaştırmak için attempt
  • 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

  1. Cats Tür Sınıfları
  2. IO Monad'ı
  3. IO Birleştirme
  4. IO'da Hata İşleme
← Scala for Backend Engineering & Functional Programming Sayfasına Dön