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

Extensions กับ generics

ขยายความสามารถของ List, Iterable และพารามิเตอร์ชนิดข้อมูล

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

การขยายคอลเลกชัน

ความมหัศจรรย์ที่แท้จริงปรากฏเมื่อคุณขยายชนิดข้อมูลทั่วไป เช่น List หรือ Iterable ส่วนขยายเดียวสามารถช่วยชนิดของสมาชิกทุกแบบได้พร้อมกัน

ประกาศพารามิเตอร์ชนิดข้อมูล

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

extension Firsts<T> on List<T> {
  T? get firstOrNull => isEmpty ? null : this[0];
}

ชนิดของสมาชิกไหลต่อเนื่อง

เนื่องจากคุณเขียน List of T เมธอดของคุณจึงคืนชนิดของสมาชิกที่ถูกต้องโดยอัตโนมัติ ไม่ต้องแปลงชนิด และไม่มีเรื่องไม่คาดคิดจาก dynamic

List<int> nums = [1, 2, 3];
int? n = nums.firstOrNull; // typed as int?

ขยาย Iterable เพื่อการใช้งานที่กว้างขึ้น

การขยาย Iterable แทน List ทำให้ตัวช่วยของคุณใช้ได้กับลิสต์ เซต และ iterable แบบประเมินค่าเมื่อจำเป็นเหมือนกัน โค้ดเดิม แต่ใช้งานได้กว้างขึ้น

extension Counts<T> on Iterable<T> {
  int countWhere(bool Function(T) f) => where(f).length;
}

เมธอดทั่วไปภายใน

เมธอดส่วนขยายสามารถรับพารามิเตอร์ ทั่วไป ของตัวเองได้เช่นกัน โดยแยกจากชนิดข้อมูลที่คุณกำลังขยาย

extension Mapping<T> on List<T> {
  List<R> mapTo<R>(R Function(T) f) => map(f).toList();
}

การอนุมานชนิดข้อมูลช่วยคุณ

Dart มัก อนุมาน อาร์กิวเมนต์ชนิดข้อมูลจากค่าที่คุณเรียกใช้ด้วย ทำให้จุดที่เรียกใช้ยังสั้นและอ่านง่าย

var first = ["a", "b"].firstOrNull; // String?

ขยาย Map ด้วยสองชนิดข้อมูล

Map ต้องใช้พารามิเตอร์สองตัว เขียน Map of K, V แล้วคุณจะสร้างตัวช่วยที่รองรับทั้งคีย์และค่าได้

extension MapPick<K, V> on Map<K, V> {
  V? pick(K key) => this[key];
}

รักษาความปลอดภัยของค่า null

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

extension SafeLast<T> on List<T> {
  T? get lastOrNull => isEmpty ? null : last;
}

นำกลับมาใช้กับชนิดสมาชิกทุกแบบ

ส่วนขยายทั่วไปเพียงหนึ่งรายการรองรับชนิดสมาชิก ทุกแบบ firstOrNull เดียวกันจึงใช้ได้กับตัวเลข สตริง และคลาสของคุณเอง

var who = <User>[].firstOrNull; // User?

จำกัดเงื่อนไขเมื่อจำเป็น

หากตัวช่วยของคุณต้องการความสามารถเฉพาะ ให้เพิ่ม ขอบเขตด้วย extends เพื่ออนุญาตเฉพาะชนิดสมาชิกที่เหมาะสม

extension Sums<T extends num> on List<T> {
  num total() => fold(0, (a, b) => a + b);
}

เหตุผลที่ส่วนขยายทั่วไปยอดเยี่ยม

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

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

ตรวจสอบสั้น ๆ เรื่องการทำให้ส่วนขยายปลอดภัยด้านชนิดข้อมูล

สรุป: ส่วนขยายทั่วไป

คุณสามารถเพิ่ม พารามิเตอร์ชนิดข้อมูลให้ส่วนขยาย กำหนดเป้าหมายเป็น List, Iterable หรือ Map และจำกัดขอบเขตด้วย extends เพื่อให้ใช้ซ้ำได้อย่างปลอดภัย ✅

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

บทเรียน “Extensions กับ generics” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “Extensions กับ generics”

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

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

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

บทเรียน “Extensions กับ generics” ใช้เวลานานแค่ไหน

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

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

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

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

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