تركيب 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 دروس في المجموع.
التسلسل باستخدام flatMap
تُعدّ ZIO monad، ولذلك تصل flatMap التأثيرات بحيث يمكن لكل خطوة استخدام نتيجة الخطوة السابقة. وتُدمج نوعا الخطأ والبيئة تلقائيًا.
import zio._
val prog =
ZIO.succeed(10).flatMap(n => Console.printLine(s"n = $n"))for-comprehension
يُعدّ for-comprehension الأسلوب الاصطلاحي لتسلسل تأثيرات ZIO؛ إذ يُقرأ مثل الشيفرة الإجرائية مع بقائه نقيًا.
import zio._
val prog = for {
_ <- Console.printLine("Enter name:")
name <- Console.readLine
_ <- Console.printLine(s"Hello, $name")
} yield ()دمج أنواع الأخطاء
عند تركيب تأثيرين بنوعي خطأ مختلفين E1 وE2، تستنتج ZIO النوع الفائق المشترك الأدنى، أي النوع الفائق المشترك لـ E1 with E2، وغالبًا ما يكون Throwable أو sealed trait.
zip وzipPar
تجمع zip تأثيرين في tuple بالتتابع. أما zipPar فتشغّلهما بالتزامن على 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 وzipLeft
تُبقي *> (zipRight) النتيجة الثانية، بينما تُبقي <* (zipLeft) النتيجة الأولى. وينفّذ كلاهما التأثيرات بالترتيب.
import zio._
val r = Console.printLine("log") *> ZIO.succeed(99)foreach
تشغّل ZIO.foreach تأثيرًا لكل عنصر في مجموعة، وتجمع النتائج، كما يفعل traverse.
import zio._
val prog = ZIO.foreach(List(1, 2, 3))(n => Console.printLine(n.toString))foreachPar
تشغّل ZIO.foreachPar تأثير كل عنصر بالتزامن، ما يجعلها مثالية لعمليات الإدخال والإخراج المتوازية، مثل إرسال عدة طلبات HTTP.
import zio._
val ids = List(1, 2, 3)
val prog = ZIO.foreachPar(ids)(id => ZIO.succeed(id * 10))التأثيرات الشرطية
تشغّل ZIO.when تأثيرًا فقط إذا كان الشرط صحيحًا، وتعيد Option من النتيجة. أما ZIO.unless فهي عكس ذلك.
import zio._
def logIf(debug: Boolean) =
ZIO.when(debug)(Console.printLine("debugging"))الحلقات
تنشئ ZIO.iterate وZIO.loop حلقات تنفّذ تأثيرات. وتعيد repeatN تشغيل تأثير عددًا ثابتًا من المرات.
import zio._
val ticks = Console.printLine("tick").repeatN(2) // runs 3 times totalسير عمل مركب
يحسب سير العمل هنا مجموعًا ويطبعه، وقد رُكّب بالكامل من خطوات ZIO صغيرة ضمن for-comprehension.
import zio._
val workflow = for {
a <- ZIO.succeed(20)
b <- ZIO.succeed(22)
_ <- Console.printLine(s"Sum: ${a + b}")
} yield ()المكافئ باستخدام Scala العادي
المنطق نفسه في Scala العادي الشره للمقارنة. تؤجل ZIO التأثيرات وتتتبّعها في نظام الأنواع، لكنها تنتج الناتج نفسه.
object Main {
def main(args: Array[String]): Unit = {
val a = 20
val b = 22
println(s"Sum: ${a + b}")
}
}تحقق سريع
أي combinator يشغّل تأثيرًا لكل عنصر في قائمة بالتزامن؟
مراجعة
لقد ركبتم تأثيرات ZIO باستخدام:
flatMap/forللتسلسلzip/zipParو*>و<*foreach/foreachParwhen/unlessوالحلقات
التالي: قناتا الخطأ والاعتماديات.
الأسئلة الشائعة
هل درس «تركيب 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 يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.