0Pricing
Scala for Backend Engineering & Functional Programming · درس

تركيب ZIO

flatMap وfor

تركيب ZIO درس مجاني في Scala for Backend Engineering & Functional Programming على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Scala for Backend Engineering & Functional Programming، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Scala for Backend Engineering & Functional Programming 4 دروس في المجموع.

بعض أجزاء هذا الدرس لم تُترجم بعد وتظهر باللغة الإنجليزية.

Sequencing with flatMap

ZIO is a monad, so flatMap chains effects where each step can use the previous result. The error and environment types combine automatically.

import zio._

val prog =
  ZIO.succeed(10).flatMap(n => Console.printLine(s"n = $n"))

for-comprehension

The for-comprehension is the idiomatic way to sequence ZIO effects, reading like imperative code while remaining pure.

import zio._

val prog = for {
  _    <- Console.printLine("Enter name:")
  name <- Console.readLine
  _    <- Console.printLine(s"Hello, $name")
} yield ()

Combining Error Types

When you compose two effects with different error types E1 and E2, ZIO infers the least upper bound E1 with E2's common supertype, often Throwable or a sealed trait.

zip and zipPar

zip combines two effects into a tuple sequentially. zipPar runs them concurrently on separate fibers.

import zio._

val seq: UIO[(Int, Int)] = ZIO.succeed(1).zip(ZIO.succeed(2))
val par: UIO[(Int, Int)] = ZIO.succeed(1).zipPar(ZIO.succeed(2))

zipRight and zipLeft

*> (zipRight) keeps the second result; <* (zipLeft) keeps the first. Both run effects in order.

import zio._

val r = Console.printLine("log") *> ZIO.succeed(99)

foreach

ZIO.foreach runs an effect for each element of a collection and gathers the results, like a traverse.

import zio._

val prog = ZIO.foreach(List(1, 2, 3))(n => Console.printLine(n.toString))

foreachPar

ZIO.foreachPar runs each element's effect concurrently — ideal for parallel I/O such as multiple HTTP requests.

import zio._

val ids = List(1, 2, 3)
val prog = ZIO.foreachPar(ids)(id => ZIO.succeed(id * 10))

Conditional Effects

ZIO.when runs an effect only if a condition is true, returning Option of the result. ZIO.unless is the inverse.

import zio._

def logIf(debug: Boolean) =
  ZIO.when(debug)(Console.printLine("debugging"))

Looping

ZIO.iterate and ZIO.loop build effectful loops. repeatN reruns an effect a fixed number of times.

import zio._

val ticks = Console.printLine("tick").repeatN(2) // runs 3 times total

A Composed Workflow

Here a workflow computes a sum and prints it, composed entirely from small ZIO steps in a for-comprehension.

import zio._

val workflow = for {
  a <- ZIO.succeed(20)
  b <- ZIO.succeed(22)
  _ <- Console.printLine(s"Sum: ${a + b}")
} yield ()

Plain Scala Equivalent

The same logic in eager plain Scala for comparison. ZIO defers and tracks effects in the type system, but produces identical output.

object Main {
  def main(args: Array[String]): Unit = {
    val a = 20
    val b = 22
    println(s"Sum: ${a + b}")
  }
}

Quick Check

Which combinator runs an effect for each element of a list concurrently?

Recap

You composed ZIO effects with:

  • flatMap / for for sequencing
  • zip / zipPar, *>, <*
  • foreach / foreachPar
  • when / unless and looping

Next: the error and dependency channels.

الأسئلة الشائعة

هل درس «تركيب ZIO» مجاني؟

نعم — نص درس «تركيب ZIO» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Scala for Backend Engineering & Functional Programming، انتقل إلى CoddyKit PRO. تتضمن دورة Scala for Backend Engineering & Functional Programming 4 دروس في المجموع.

ماذا ستتعلم في «تركيب ZIO»؟

flatMap وfor تتمرن على Scala for Backend Engineering & Functional Programming مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Scala for Backend Engineering & Functional Programming؟

لا تُشترط خبرة سابقة. Scala for Backend Engineering & Functional Programming على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «تركيب ZIO»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Scala for Backend Engineering & Functional Programming هذا؟

نعم. كل درس في Scala for Backend Engineering & Functional Programming يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. أثر ZIO
  2. تركيب ZIO
  3. قنوات الأخطاء والتبعيات
  4. تشغيل تطبيقات ZIO
← العودة إلى Scala for Backend Engineering & Functional Programming