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

เอฟเฟกต์ ZIO

ZIO[R,E,A]

บทเรียน 1 จาก 413 ขั้นตอน

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

ZIO คืออะไร

ZIO คือไลบรารีสำหรับผลกระทบเชิงฟังก์ชันแบบอะซิงโครนัส ทำงานพร้อมกัน และปลอดภัยต่อทรัพยากร ชนิดหลักคือ ZIO[R, E, A] — คำอธิบายเวิร์กโฟลว์ที่เมื่อได้รับสภาพแวดล้อม R แล้วอาจล้มเหลวด้วย E หรือสำเร็จด้วย A

พารามิเตอร์ชนิดสามตัว

อ่าน ZIO[R, E, A] เป็นฟังก์ชัน R => Either[E, A] (แบบอะซิงโครนัสและมีผลกระทบ):

  • R — สภาพแวดล้อม/การพึ่งพาที่ต้องใช้
  • E — ชนิดข้อผิดพลาดหากล้มเหลว
  • A — ชนิดค่าหากสำเร็จ

นามแฝงชนิด

ZIO มีนามแฝงที่ใช้งานสะดวก:

  • UIO[A] = ZIO[Any, Nothing, A] — ไม่สามารถล้มเหลวได้
  • Task[A] = ZIO[Any, Throwable, A]
  • IO[E, A] = ZIO[Any, E, A]
  • RIO[R, A] = ZIO[R, Throwable, A]

การสร้างผลกระทบที่สำเร็จ

ZIO.succeed ยกค่าบริสุทธิ์เข้าไป ผลกระทบนี้ไม่สามารถล้มเหลวได้ ดังนั้นชนิดข้อผิดพลาดจึงเป็น Nothing

import zio._

val meaning: UIO[Int] = ZIO.succeed(42)

การสร้างความล้มเหลว

ZIO.fail สร้างผลกระทบที่ล้มเหลวพร้อมข้อผิดพลาดที่มีชนิดกำกับ ชนิดความสำเร็จคือ Nothing เพราะจะไม่มีวันสำเร็จ

import zio._

val failed: IO[String, Nothing] = ZIO.fail("Something went wrong")

การห่อผลกระทบข้างเคียง

ZIO.attempt ห่อบล็อกที่มีผลกระทบข้างเคียงและอาจโยนข้อยกเว้น โดยชนิดข้อผิดพลาดจะกลายเป็น Throwable (หรือเป็น Task)

import zio._

val parsed: Task[Int] = ZIO.attempt("123".toInt)

การพิมพ์ไปยังคอนโซล

บริการ Console ของ ZIO มีการพิมพ์ที่มีผลกระทบ Console.printLine คืนค่า ZIO ที่มีชนิดข้อผิดพลาดเป็น IOException

import zio._

val hello = Console.printLine("Hello, ZIO!")

map

map แปลงค่าผลลัพธ์ที่สำเร็จ โดยไม่เปลี่ยนแปลงช่องข้อผิดพลาดและช่องสภาพแวดล้อม

import zio._

val doubled: UIO[Int] = ZIO.succeed(21).map(_ * 2)

mapError

mapError แปลงช่องข้อผิดพลาด ซึ่งมีประโยชน์สำหรับแปลงความล้มเหลวระดับล่างให้เป็นข้อผิดพลาดเฉพาะโดเมน

import zio._

val e: IO[String, Int] =
  ZIO.fail(404).mapError(code => s"HTTP $code")

ความประเมินแบบขี้เกียจและความบริสุทธิ์

เช่นเดียวกับ IO ของ Cats Effect ค่า ZIO เป็นคำอธิบายที่บริสุทธิ์และประเมินแบบขี้เกียจ การสร้างค่านี้จะไม่ทำให้เกิดผลข้างเคียงใด ๆ จะเกิดขึ้นก็ต่อเมื่อเรียกใช้ค่าดังกล่าวบนรันไทม์ของ ZIO

พื้นฐาน Scala แบบธรรมดา

เพื่อให้เห็นความแตกต่าง ต่อไปนี้คือโปรแกรม Scala แบบทำงานทันทีและมีทุกอย่างอยู่ในตัว ZIO จะเลื่อนการทำงานออกไปและติดตามข้อผิดพลาดไว้ในชนิดข้อมูล แต่ผลลัพธ์จะเหมือนกัน

object Main {
  def main(args: Array[String]): Unit = {
    val x = 42
    println(s"value: $x")
  }
}

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

ใน ZIO[R, E, A] พารามิเตอร์ E แทนอะไร

สรุปทบทวน

คุณได้เรียนรู้ชนิดเอฟเฟกต์ของ ZIO:

  • ZIO[R, E, A] — สภาพแวดล้อม ข้อผิดพลาด ผลลัพธ์ที่สำเร็จ
  • ชื่อเรียกแทน UIO, Task, IO, RIO
  • succeed, fail, attempt
  • map และ mapError

ถัดไป: การประกอบเอฟเฟกต์ของ ZIO

เริ่มต้นได้ฟรี

เรียนรู้ Scala ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
39
บทเรียน
143

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

บทเรียน “เอฟเฟกต์ ZIO” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “เอฟเฟกต์ ZIO” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Scala for Backend Engineering & Functional Programming ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Scala for Backend Engineering & Functional Programming มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “เอฟเฟกต์ ZIO”

ZIO[R,E,A] คุณปฏิบัติ Scala for Backend Engineering & Functional Programming ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Scala for Backend Engineering & Functional Programming หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Scala for Backend Engineering & Functional Programming บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 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