Dart Academy · บทเรียน

คลาส sealed และ switch แบบครอบคลุมทุกกรณี

ปิดลำดับชั้นให้คอมไพเลอร์ตรวจสอบได้

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

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

ตระกูลที่ปิดตาย

คลาส sealed จะกำหนดชุดประเภทย่อยที่ตายตัว โค้ดภายนอกไฟล์นั้นไม่สามารถเพิ่มประเภทย่อยใหม่ได้ จึงทราบสมาชิกทั้งหมดของตระกูลนี้อย่างครบถ้วน

sealed class Shape {}

การประกาศประเภทย่อย

คลาสย่อยของประเภท sealed จะอยู่ในไฟล์เดียวกัน เมื่อรวมกันแล้วจะครอบคลุมรูปแบบที่เป็นไปได้ทั้งหมดซึ่งคอมไพเลอร์ต้องพิจารณา

class Circle extends Shape {}
class Square extends Shape {}

สร้างอินสแตนซ์โดยตรงไม่ได้

คลาส sealed จะเป็นนามธรรมโดยปริยาย ดังนั้นคุณจะไม่สร้างคลาสนี้โดยตรง แต่จะสร้างได้เฉพาะประเภทย่อยที่ทราบอยู่แล้วเท่านั้น

var s = Shape(); // error
var s = Circle(); // ok

ประโยชน์ของ sealed

เนื่องจากประเภทย่อยครอบคลุมครบทุกกรณี Dart จึงทราบรายการทั้งหมด การทำเช่นนี้ทำให้ switch ตรวจสอบได้ว่าคุณจัดการทุกกรณีแล้ว

สลับการทำงานตามประเภทย่อย

switch ที่ใช้กับค่า sealed สามารถจับคู่ประเภทย่อยแต่ละประเภทด้วยแพตเทิร์นได้ แต่ละแขนงจะเห็นประเภทที่ตรงกันอย่างแม่นยำ

switch (shape) {
  case Circle(): print('round');
  case Square(): print('boxy');
}

ตรวจสอบความครอบคลุมครบถ้วน

หากคุณลืมประเภทย่อยใด คอมไพเลอร์จะแจ้งข้อผิดพลาด คุณจะไม่สามารถละกรณีใดจาก switch แบบ sealed ไปโดยไม่มีการแจ้งเตือนได้

ไม่จำเป็นต้องใช้ default

เมื่อครอบคลุมทุกกรณีแล้ว คุณไม่จำเป็นต้องมีแขนง default การเพิ่มแขนงนี้มีแต่จะซ่อนกรณีที่อาจตกหล่นในอนาคต

switch ในฐานะนิพจน์

ใช้ switch เป็นนิพจน์เพื่อคำนวณค่าโดยตรง ยังคงต้องครอบคลุมทุกกรณี ดังนั้นทุกแขนงจึงต้องคืนค่าบางอย่าง

final name = switch (shape) {
  Circle() => 'circle',
  Square() => 'square',
};

การเพิ่มรูปแบบใหม่

หากเพิ่มประเภทย่อยใหม่ภายหลัง switch ทุกแห่งที่ยังไม่รองรับประเภทย่อยนั้นจะถูกเน้นเป็นสีแดง คอมไพเลอร์จะช่วยชี้จุดที่ต้องแก้ไข

class Triangle extends Shape {}
// existing switches now error

sealed กับ abstract

คลาส abstract อนุญาตให้มีประเภทย่อยภายนอกที่ไม่ทราบล่วงหน้าได้ จึงไม่สามารถตรวจสอบ switch ให้ครอบคลุมทั้งหมดได้ ส่วน sealed จะปิดชุดประเภทเพื่อให้ตรวจสอบได้ครบถ้วน

เหมาะสำหรับสถานะ

ประเภท sealed เหมาะอย่างยิ่งสำหรับจำลองสถานะของแอป เช่น Loading, Success และ Error ทำให้มั่นใจได้ว่าแต่ละแขนงของส่วนติดต่อผู้ใช้มีอยู่จริง ✅

sealed class Result {}
class Loading extends Result {}
class Done extends Result {}

ตรวจสอบสั้น ๆ

ตรวจสอบความเข้าใจเรื่องการครอบคลุมทุกกรณีของ sealed

สรุป

คุณได้เห็นว่า คลาส sealed จะปิดตระกูลประเภทและทำให้ switch ต้องครอบคลุมทุกกรณี กรณีที่ตกหล่นจึงกลายเป็นข้อผิดพลาดระหว่างคอมไพล์ 🎯

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

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

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

คอร์ส
30
บทเรียน
120

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

บทเรียน “คลาส sealed และ switch แบบครอบคลุมทุกกรณี” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “คลาส sealed และ switch แบบครอบคลุมทุกกรณี” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Dart Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Dart Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “คลาส sealed และ switch แบบครอบคลุมทุกกรณี”

ปิดลำดับชั้นให้คอมไพเลอร์ตรวจสอบได้ คุณปฏิบัติ Dart Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Dart Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Dart Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “คลาส sealed และ switch แบบครอบคลุมทุกกรณี” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Dart Academy นี้ได้ไหม

ได้ บทเรียน Dart Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. ฟิลด์ final และความไม่เปลี่ยนแปลงอย่างลึก
  2. คลาส sealed และ switch แบบครอบคลุมทุกกรณี
  3. ตัวปรับแต่ง base, interface และ final
  4. copyWith และความเท่าเทียมตามค่า
← กลับไปที่ Dart Academy