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

การเรียกใช้แอป ZIO

ZIOAppDefault

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

จากคำอธิบายสู่การทำงาน

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

ZIOAppDefault

สืบทอดจาก ZIOAppDefault และสร้างการทำงานของ run เฟรมเวิร์กจะจัดเตรียมบริการเริ่มต้น (Console, Clock, Random, System) และจัดการการเริ่มต้นกับการปิดการทำงาน

import zio._

object Hello extends ZIOAppDefault {
  def run = Console.printLine("Hello, ZIO!")
}

ค่าของ run

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

แอปหลายขั้นตอน

ประกอบตรรกะของแอปด้วย for-comprehension แต่ละบรรทัดคือเอฟเฟกต์ที่รันไทม์เรียกใช้ตามลำดับ

import zio._

object Greeter extends ZIOAppDefault {
  def run = for {
    _    <- Console.printLine("What is your name?")
    name <- Console.readLine
    _    <- Console.printLine(s"Hello, $name!")
  } yield ()
}

การจัดเตรียมเลเยอร์ใน run

หากแอปของคุณขึ้นอยู่กับบริการแบบกำหนดเอง ให้ส่งเลเยอร์ของบริการเหล่านั้นด้วย provide บนเอฟเฟกต์ run เพื่อให้สภาพแวดล้อมได้รับการตอบสนองครบถ้วนก่อนเริ่มทำงาน

import zio._

object App extends ZIOAppDefault {
  // def run = program.provide(MyService.layer)
  def run = ZIO.unit
}

รหัสการออก

โดยค่าเริ่มต้น run ที่สำเร็จจะจบการทำงานด้วยรหัส 0 ส่วนความล้มเหลวจะใช้รหัสที่ไม่ใช่ศูนย์ นอกจากนี้คุณยังคืนค่า ExitCode อย่างชัดเจนได้ด้วย exitCode

import zio._

object App extends ZIOAppDefault {
  def run = Console.printLine("done").exitCode
}

อาร์กิวเมนต์บรรทัดคำสั่ง

เข้าถึงอาร์กิวเมนต์ของโปรแกรมด้วย ZIOAppArgs ผ่าน ZIOApp.args หรือ getArgs ซึ่งคืนค่าเป็น Chunk[String]

import zio._

object App extends ZIOAppDefault {
  def run = for {
    args <- getArgs
    _    <- Console.printLine(s"args: ${args.mkString(", ")}")
  } yield ()
}

การจัดการความล้มเหลวที่ขอบระบบ

แนวทางที่ดีคือจัดการหรือบันทึกข้อผิดพลาดที่ระดับบนสุด เพื่อให้รันไทม์พิมพ์ข้อความที่อ่านเข้าใจได้ ใช้ catchAll หรือ tapError ใน run

import zio._

object App extends ZIOAppDefault {
  val logic = ZIO.fail("oops")
  def run = logic.catchAll(e => Console.printLine(s"Failed: $e"))
}

การแยกไฟเบอร์

ภายใน run คุณสามารถใช้ fork เพื่อแยกเอฟเฟกต์ไปทำงานบนไฟเบอร์สำหรับการทำงานพร้อมกัน แล้วใช้ join เพื่อรอรวมผลภายหลัง รันไทม์จะกำกับดูแลไฟเบอร์ทั้งหมดและขัดจังหวะไฟเบอร์เหล่านั้นเมื่อปิดการทำงาน

import zio._

val prog = for {
  fiber  <- ZIO.succeed(40).fork
  result <- fiber.join
  _      <- Console.printLine(s"got $result")
} yield ()

การเรียกใช้แบบไม่ปลอดภัยด้วยตนเอง

นอกเหนือจาก ZIOAppDefault คุณสามารถเรียกใช้เอฟเฟกต์ด้วย Unsafe.unsafe และ Runtime ได้ แต่วิธีนี้สงวนไว้สำหรับขอบเขตการเชื่อมต่อระบบ ไม่ใช่โค้ดแอปทั่วไป

import zio._

// Unsafe.unsafe { implicit u =>
//   Runtime.default.unsafe.run(myEffect).getOrThrow()
// }

main ของ Scala แบบธรรมดา

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

object Main {
  def main(args: Array[String]): Unit = {
    println("Hello, ZIO!")
  }
}

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

วิธีที่แนะนำสำหรับเรียกใช้แอปพลิเคชัน ZIO คืออะไร

สรุปทบทวน

คุณได้เรียนรู้วิธีเรียกใช้แอป ZIO:

  • ZIOAppDefault พร้อมเอฟเฟกต์ run
  • บริการเริ่มต้นและ provide สำหรับเลเยอร์
  • รหัสการออก อาร์กิวเมนต์ และการจัดการข้อผิดพลาดระดับบนสุด
  • การแยกไฟเบอร์และขอบเขตที่ไม่ปลอดภัย

คุณเรียนจบหลักสูตรพื้นฐาน ZIO แล้ว

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

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

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

คุณจะเรียนรู้อะไรในบทเรียน “การเรียกใช้แอป ZIO”

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

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

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