คลาส sealed และ switch แบบครอบคลุมทุกกรณี
ปิดลำดับชั้นให้คอมไพเลอร์ตรวจสอบได้
คลาส 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 errorsealed กับ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ฟิลด์ final และความไม่เปลี่ยนแปลงอย่างลึก
- คลาส sealed และ switch แบบครอบคลุมทุกกรณี
- ตัวปรับแต่ง base, interface และ final
- copyWith และความเท่าเทียมตามค่า