0Pricing
Dart Academy · บทเรียน

พารามิเตอร์ชนิดข้อมูลแบบมีขอบเขตด้วย extends

จำกัดสิ่งที่ generic รับได้

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

เมื่อการรับทุกประเภทข้อมูลกว้างเกินไป

พารามิเตอร์ประเภทข้อมูลทั่วไปยอมรับได้ทุกประเภท แต่บางครั้งคุณต้องการมากกว่านั้น คุณอาจต้องเรียกใช้เมธอดที่มีเฉพาะบางประเภทข้อมูลเท่านั้น 🔒

การกำหนดขอบเขตด้วย extends

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

class Cage<T extends Animal> {}

สิ่งที่ขอบเขตรับประกัน

ภายในคลาส Dart จะเชื่อถือได้ว่า T เป็น Animal อย่างน้อย ดังนั้นคุณจึงใช้ สมาชิกใด ๆ ที่ Animal กำหนดไว้ได้อย่างปลอดภัย

class Cage<T extends Animal> {
  void feed(T a) => a.eat();
}

ปฏิเสธประเภทข้อมูลที่ไม่ถูกต้อง

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

Cage<String>();

ขอบเขตสำหรับตัวเลข

ขอบเขตที่ใช้กันทั่วไปคือ num ซึ่งเป็นประเภทแม่ของ int และ double ทำให้เจเนอริกคำนวณเลขได้ พร้อมยังรองรับทั้งสองประเภทตัวเลข

T addOne<T extends num>(T x) => x + 1 as T;

ขอบเขตของเมธอด

ขอบเขตใช้กับ เมธอดแบบเจเนอริกได้เช่นกัน ไม่ได้จำกัดเฉพาะคลาส ให้วาง extends ต่อจากชื่อพารามิเตอร์ประเภทข้อมูลในเมธอด

num biggest<T extends num>(List<T> xs) =>
    xs.reduce((a, b) => a > b ? a : b);

ขอบเขตเริ่มต้นคือ Object

เมื่อไม่ระบุขอบเขต ขอบเขตโดยนัยคือ Object? นั่นเป็นเหตุผลที่ T ซึ่งไม่มีขอบเขตใช้ได้เฉพาะสมาชิกที่ออบเจ็กต์ทุกตัวมีร่วมกัน

ขอบเขต Comparable

หากต้องการเรียงลำดับหรือเปรียบเทียบ ให้กำหนดขอบเขตเป็น Comparable จากนั้นคุณจะเรียกใช้ compareTo กับค่าในโค้ดเจเนอริกได้

T max<T extends Comparable<T>>(T a, T b) =>
    a.compareTo(b) >= 0 ? a : b;

ขอบเขตสื่อเจตนา

ขอบเขตยังบอกผู้อ่านด้วยว่าประเภทข้อมูลลักษณะใดเหมาะกับส่วนนี้ ลายเซ็นของโค้ดเองจะอธิบายสัญญาที่โค้ดคาดหวัง

ขอบเขตอ้างอิงตัวเอง

สังเกตว่า T สามารถปรากฏในขอบเขตของตัวเองได้ เช่น T extends Comparable ของ T รูปแบบนี้เชื่อมประเภทข้อมูลเข้ากับการดำเนินการที่ทำกับตัวมันเอง

กำหนดขอบเขตให้น้อยที่สุด

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

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ขอบเขตช่วยให้คุณทำอะไรภายในคลาสได้

สรุปทบทวน

คุณใช้ extends เพื่อกำหนดขอบเขตให้พารามิเตอร์ประเภทข้อมูล ทำให้เรียกใช้เมธอดของประเภทที่เป็นขอบเขตได้ และปฏิเสธประเภทข้อมูลที่ไม่เกี่ยวข้อง ควรกำหนดขอบเขตให้กว้างเท่าที่งานต้องการ ✅

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

บทเรียน “พารามิเตอร์ชนิดข้อมูลแบบมีขอบเขตด้วย extends” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “พารามิเตอร์ชนิดข้อมูลแบบมีขอบเขตด้วย extends”

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

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

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

บทเรียน “พารามิเตอร์ชนิดข้อมูลแบบมีขอบเขตด้วย extends” ใช้เวลานานแค่ไหน

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

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

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

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

  1. เหตุใด generics จึงดีกว่า dynamic
  2. คลาสและเมธอดแบบ generic
  3. พารามิเตอร์ชนิดข้อมูลแบบมีขอบเขตด้วย extends
  4. คอลเลกชันแบบ generic ในการใช้งานจริง
← กลับไปที่ Dart Academy