0Pricing
Scala for Backend Engineering & Functional Programming · Ders

Hata ve Bağımlılık Kanalları

Türlendirilmiş hatalar ve ortam

Hata ve Bağımlılık Kanalları, CoddyKit'te ücretsiz bir Scala for Backend Engineering & Functional Programming dersidir. Bu, 4 dersinin 3. 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.

İki Güçlü Kanal

Başarı değerinin yanı sıra ZIO[R, E, A], tür belirtilmiş bir hata kanalı olan E'yi ve bir bağımlılık kanalı olan R'yi izler. Her ikisi de türde görünür; böylece hatalar ve gereksinimler derleme zamanında açıkça belirlenir.

Tür Belirtilmiş Hatalar

Alan hatalarını mühürlü bir hiyerarşi olarak modelleyip E içine yerleştirin. Böylece derleyici, tam olarak bu durumları ele almanızı zorunlu kılar.

import zio._

sealed trait AppError
case object NotFound extends AppError
case object Forbidden extends AppError

val lookup: IO[AppError, String] = ZIO.fail(NotFound)

catchAll ile Kurtarma

catchAll, E içindeki tüm hataları yeni bir etki sağlayarak ele alır. Tüm hatalar ele alındıysa hata kanalı sonrasında Nothing olabilir.

import zio._

val safe: UIO[String] =
  ZIO.fail("boom").catchAll(e => ZIO.succeed(s"recovered: $e"))

catchSome ve orElse

catchSome yalnızca eşleşen hatalardan kurtarır. orElse, herhangi bir hata durumunda başka bir etkiye geçer.

import zio._

val prog = ZIO.fail("x").orElse(ZIO.succeed("fallback"))

Either ve fold

either, ZIO[R, E, A] değerini ZIO[R, Nothing, Either[E, A]] değerine dönüştürür. fold, hem hatayı hem de başarıyı tek bir değere dönüştürür.

import zio._

val label: UIO[String] =
  ZIO.fail(404).fold(e => s"err $e", v => s"ok $v")

Kusurlar ve Hatalar

ZIO, hataları (E içinde yer alan, tür belirtilmiş ve beklenen durumlar) kusurlardan (beklenmeyen fırlatılabilir durumlardan) ayırır. ZIO.die bir kusur oluşturur; kusurlar E türünde yer almaz ve hataları temsil eder.

R Ortamı

R kanalı, bir etkinin ihtiyaç duyduğu hizmetleri bildirir. Bir hizmete ZIO.service ile erişilir; gereksinim sağlanana kadar R içinde görünür.

import zio._

trait Logger { def log(s: String): UIO[Unit] }

val prog: ZIO[Logger, Nothing, Unit] =
  ZIO.serviceWithZIO[Logger](_.log("hello"))

Hizmet Tanımlama

Bir hizmet, onu oluşturan bir özellik ile ZLayer'dan oluşur. Katmanlar bağımlılıkların nasıl oluşturulacağını açıklar ve kendileri de başka katmanlara bağlı olabilir.

import zio._

case class ConsoleLogger() extends Logger {
  def log(s: String): UIO[Unit] = ZIO.succeed(println(s))
}
object ConsoleLogger {
  val layer: ULayer[Logger] = ZLayer.succeed(ConsoleLogger())
}

trait Logger { def log(s: String): UIO[Unit] }

Bağımlılıkları Sağlama

provide (veya provideLayer), R gereksinimini karşılayarak ZIO[Logger, E, A] değerini çalıştırılmaya hazır ZIO[Any, E, A] değerine dönüştürür.

import zio._

val runnable: UIO[Unit] =
  ZIO.serviceWithZIO[Logger](_.log("hi"))
    .provide(ConsoleLogger.layer)

trait Logger { def log(s: String): UIO[Unit] }
object ConsoleLogger { val layer: ULayer[Logger] = ??? }

Katmanları Birleştirme

Katmanlar yatay olarak ++ (birleştirme), dikey olarak ise >>> (bir katmanın çıktısını diğerinin girdisi olarak iletme) ile birleştirilerek eksiksiz bir bağımlılık grafiği oluşturulur.

import zio._

// val appLayer = configLayer ++ (dbLayer >>> repoLayer)

Basit Scala Temeli

Karşılaştırma amacıyla, hataların elle ele alındığı, kendi kendine yeten bir Scala programı. ZIO aynı hatayı tür içinde kodlar ve bağımlılıkları katmanlar aracılığıyla ekler.

object Main {
  def main(args: Array[String]): Unit = {
    val result: Either[String, Int] = Left("NotFound")
    val msg = result.fold(e => s"err $e", v => s"ok $v")
    println(msg)
  }
}

Hızlı Kontrol

provide yöntemi, ZIO[Logger, E, A] üzerinde ne yapar?

Özet

Her iki ek kanalla da çalıştınız:

  • Hatalar: tür belirtilmiş E, catchAll, orElse, fold, kusurlar ve hatalar
  • Bağımlılıklar: R, hizmetler, ZLayer, provide, katman birleştirme

Sırada: ZIO uygulamalarını çalıştırma.

Sıkça Sorulan Sorular

“Hata ve Bağımlılık Kanalları” dersi ücretsiz mi?

Evet — “Hata ve Bağımlılık Kanalları” 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.

“Hata ve Bağımlılık Kanalları” dersinde ne öğreneceğim?

Türlendirilmiş hatalar ve ortam 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 3. dersidir.

“Hata ve Bağımlılık Kanalları” 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. ZIO Etkisi
  2. ZIO Birleştirme
  3. Hata ve Bağımlılık Kanalları
  4. ZIO Uygulamaları Çalıştırma
← Scala for Backend Engineering & Functional Programming Sayfasına Dön