0Pricing
Scala for Backend Engineering & Functional Programming · บทเรียน

การประกอบ ZIO

flatMap และ for

การประกอบ ZIO เป็นบทเรียน Scala for Backend Engineering & Functional Programming ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Scala for Backend Engineering & Functional Programming และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Scala for Backend Engineering & Functional Programming มีบทเรียนทั้งหมด 4 บทเรียน

การเรียงลำดับด้วย flatMap

ZIO เป็นโมนาด ดังนั้น 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 หรือ trait แบบปิด

zip และ zipPar

zip รวมเอฟเฟกต์สองรายการเป็นทูเพิลตามลำดับ ส่วน zipPar เรียกใช้ทั้งสองรายการพร้อมกันบนไฟเบอร์แยกกัน

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 เรียกใช้เอฟเฟกต์ของสมาชิกแต่ละรายการพร้อมกัน เหมาะอย่างยิ่งกับการทำงานด้าน IO แบบขนาน เช่น การส่งคำขอ 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}")
  }
}

ตรวจสอบอย่างรวดเร็ว

ตัวดำเนินการใดเรียกใช้เอฟเฟกต์กับสมาชิกแต่ละรายการของรายการพร้อมกัน

สรุปทบทวน

คุณได้ประกอบเอฟเฟกต์ของ ZIO ด้วย:

  • flatMap / for สำหรับการเรียงลำดับ
  • zip / zipPar, *>, <*
  • foreach / foreachPar
  • when / unless และการวนซ้ำ

ถัดไป: ช่องข้อผิดพลาดและช่องการพึ่งพา

คำถามที่พบบ่อย

บทเรียน “การประกอบ ZIO” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การประกอบ ZIO” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 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 ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 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 ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. เอฟเฟกต์ ZIO
  2. การประกอบ ZIO
  3. ช่องทางข้อผิดพลาดและการพึ่งพา
  4. การเรียกใช้แอป ZIO
← กลับไปที่ Scala for Backend Engineering & Functional Programming