Dart Academy · บทเรียน

ชนิด extension สำหรับตัวห่อที่ไม่มีต้นทุนเพิ่ม

ห่อชนิดข้อมูลโดยไม่เพิ่มภาระขณะทำงาน

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

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

เครื่องมืออีกแบบหนึ่ง

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

ห่อหุ้มโดยไม่สร้างกล่อง

ต่างจากคลาสห่อหุ้มจริง ชนิดส่วนขยายจะไม่เพิ่มออบเจ็กต์ ใด ๆ ขณะทำงาน ในขณะทำงานมันก็คือค่าพื้นฐานเดิม

extension type UserId(int id) {}

ชนิดตัวแทน

ค่าที่อยู่ในวงเล็บคือชนิด ตัวแทน ในที่นี้ UserId แท้จริงแล้วเป็นเพียง int ที่ใช้ชื่อปลอดภัยกว่า

extension type Meters(double value) {}

สร้างได้ง่าย

คุณสร้างชนิดส่วนขยายเหมือนเรียก ตัวสร้าง โดยส่งค่าพื้นฐานเข้าไปโดยตรง

var id = UserId(42);
var d = Meters(3.5);

เพิ่มเมธอดที่ปลอดภัย

ภายในเนื้อหาของชนิด คุณสามารถเพิ่ม เมธอดและ getter ที่ทำงานกับค่าที่ห่อหุ้ม ทำให้ค่านั้นมีความหมายที่แท้จริง

extension type Meters(double value) {
  Meters plus(Meters o) => Meters(value + o.value);
}

แข็งแกร่งกว่า typedef

typedef เป็นเพียงชื่อแทน แต่ชนิดส่วนขยายเป็นชนิดที่ แตกต่าง คุณจึงไม่สามารถนำ UserId ไปใช้ปะปนกับ int ทั่วไปโดยไม่ตั้งใจ

int raw = 42;
// UserId u = raw; // error: not interchangeable

ซ่อน API พื้นฐาน

โดยค่าเริ่มต้น ชนิดส่วนขยายจะ ซ่อนสมาชิกของชนิดที่ห่อหุ้มไว้ ดังนั้นจึงเรียกใช้ได้เฉพาะเมธอดที่คุณเปิดเผย

var m = Meters(2.0);
// m.toStringAsFixed(2); // not available unless exposed

หรือใช้งาน implements เพื่อเปิดเผย

เพิ่ม implements เพื่อส่งต่อสมาชิกของชนิดพื้นฐาน ทำให้ผู้เรียกใช้ได้ทั้ง API ของคุณและชนิดพื้นฐาน

extension type Score(int value) implements int {}
print(Score(9) + 1); // 10

ไม่มีค่าใช้จ่ายขณะทำงาน

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

เหมาะสำหรับรหัสประจำโดเมน

ชนิดเหล่านี้เหมาะอย่างยิ่งกับ ตัวระบุที่มีชนิด เช่น UserId หรือ Email ช่วยป้องกันไม่ให้ส่ง int ผิดตัวไปยังช่องที่ไม่เหมาะสม

void load(UserId id) {}
load(UserId(7)); // load(7) would not compile

ส่วนขยายกับชนิดส่วนขยาย

ส่วนขยายเพิ่มเมธอดให้ชนิดข้อมูลที่ทุกส่วนใช้ร่วมกัน ส่วนชนิดส่วนขยายสร้างชนิดใหม่ที่ แตกต่างขึ้นมาครอบค่าหนึ่งค่า

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

ตรวจสอบครั้งสุดท้าย อะไรทำให้ชนิดส่วนขยายมีความพิเศษ

สรุป: ชนิดส่วนขยาย

คุณได้รู้จัก ชนิดส่วนขยาย ซึ่งเป็นตัวห่อหุ้มชนิดตัวแทนที่แตกต่างและไม่เสียต้นทุน เหมาะสำหรับรหัสประจำตัวและหน่วยวัดที่ปลอดภัยโดยไม่มีต้นทุนขณะทำงาน 🏁

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

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

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

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

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

บทเรียน “ชนิด extension สำหรับตัวห่อที่ไม่มีต้นทุนเพิ่ม” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “ชนิด extension สำหรับตัวห่อที่ไม่มีต้นทุนเพิ่ม”

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

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

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

บทเรียน “ชนิด extension สำหรับตัวห่อที่ไม่มีต้นทุนเพิ่ม” ใช้เวลานานแค่ไหน

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

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

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

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

  1. เขียน extension แรกของคุณ
  2. Extensions กับ generics
  3. สมาชิก extension แบบ static และความขัดแย้ง
  4. ชนิด extension สำหรับตัวห่อที่ไม่มีต้นทุนเพิ่ม
← กลับไปที่ Dart Academy