0Pricing
Scala for Backend Engineering & Functional Programming · Pelajaran

Kanal Error dan Dependensi

Error bertipe dan lingkungan.

Kanal Error dan Dependensi adalah pelajaran Scala for Backend Engineering & Functional Programming gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Scala for Backend Engineering & Functional Programming, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Scala for Backend Engineering & Functional Programming mencakup 4 pelajaran total.

Dua Saluran yang Kuat

Selain nilai keberhasilan, ZIO[R, E, A] melacak saluran galat bertipe E dan saluran dependensi R. Keduanya terlihat dalam tipe, sehingga kegagalan dan persyaratan dinyatakan secara eksplisit saat kompilasi.

Galat Bertipe

Modelkan kegagalan domain sebagai hierarki tersegel dan masukkan ke dalam E. Kompilator kemudian memaksa Anda menangani tepat kasus-kasus tersebut.

import zio._

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

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

Memulihkan dengan catchAll

catchAll menangani setiap galat dalam E dengan menyediakan efek baru. Setelah itu, saluran galat dapat menjadi Nothing jika seluruh galat telah ditangani.

import zio._

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

catchSome dan orElse

catchSome hanya memulihkan galat yang cocok. orElse beralih ke efek lain sebagai cadangan jika terjadi kegagalan apa pun.

import zio._

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

Either dan fold

either mengubah ZIO[R, E, A] menjadi ZIO[R, Nothing, Either[E, A]]. fold menangani galat dan keberhasilan menjadi satu nilai.

import zio._

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

Cacat dan Kegagalan

ZIO membedakan kegagalan (bertipe, diharapkan, dalam E) dari cacat (throwable yang tidak terduga). ZIO.die memunculkan cacat; cacat tidak terdapat dalam tipe E dan menunjukkan adanya bug.

Lingkungan R

Saluran R menyatakan layanan yang dibutuhkan suatu efek. Akses layanan dengan ZIO.service; persyaratan tersebut tetap muncul dalam R sampai disediakan.

import zio._

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

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

Mendefinisikan Layanan

Layanan terdiri atas trait dan ZLayer yang membangunnya. Layer menjelaskan cara membangun dependensi dan dapat bergantung pada layer lain.

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] }

Menyediakan Dependensi

provide (atau provideLayer) memenuhi persyaratan R, sehingga ZIO[Logger, E, A] berubah menjadi ZIO[Any, E, A] yang siap dijalankan.

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] = ??? }

Menyusun Layer

Layer disusun secara horizontal dengan ++ (menggabungkan) dan secara vertikal dengan >>> (menyalurkan keluaran satu layer sebagai masukan layer lain), sehingga membangun graf dependensi lengkap.

import zio._

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

Dasar Scala Sederhana

Sebagai perbandingan, program Scala mandiri dengan penanganan galat manual. ZIO menyandikan galat yang sama dalam tipe dan menyuntikkan dependensi melalui layer.

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)
  }
}

Pemeriksaan Singkat

Apa yang dilakukan metode provide terhadap ZIO[Logger, E, A]?

Ringkasan

Anda telah bekerja dengan kedua saluran tambahan:

  • Galat: E bertipe, catchAll, orElse, fold, cacat dan kegagalan
  • Dependensi: R, layanan, ZLayer, provide, penyusunan layer

Berikutnya: menjalankan aplikasi ZIO.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Kanal Error dan Dependensi” gratis?

Ya — teks lengkap “Kanal Error dan Dependensi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Scala for Backend Engineering & Functional Programming, upgrade ke CoddyKit PRO. Kursus Scala for Backend Engineering & Functional Programming mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Kanal Error dan Dependensi”?

Error bertipe dan lingkungan. Kamu berlatih Scala for Backend Engineering & Functional Programming dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Scala for Backend Engineering & Functional Programming?

Tidak diperlukan pengalaman sebelumnya. Scala for Backend Engineering & Functional Programming di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Kanal Error dan Dependensi” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Scala for Backend Engineering & Functional Programming ini?

Ya. Setiap pelajaran Scala for Backend Engineering & Functional Programming menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Efek ZIO
  2. Menyusun ZIO
  3. Kanal Error dan Dependensi
  4. Menjalankan Aplikasi ZIO
← Kembali ke Scala for Backend Engineering & Functional Programming