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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เขียน extension แรกของคุณ
- Extensions กับ generics
- สมาชิก extension แบบ static และความขัดแย้ง
- ชนิด extension สำหรับตัวห่อที่ไม่มีต้นทุนเพิ่ม