การประกอบสายส่งผ่านฟังก์ชันบริสุทธิ์
เชื่อมการแปลงข้อมูลอย่างคาดเดาได้
การประกอบสายส่งผ่านฟังก์ชันบริสุทธิ์ เป็นบทเรียน Dart Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Dart Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Dart Academy มีบทเรียนทั้งหมด 4 บทเรียน
ฟังก์ชันบริสุทธิ์คืออะไร
ฟังก์ชันบริสุทธิ์จะส่งคืนผลลัพธ์เดิมเมื่อได้รับข้อมูลนำเข้าเดิม และจะไม่เปลี่ยนแปลงสิ่งใดภายนอกตัวเอง จึงคาดเดาได้และทดสอบได้ง่าย ✨
int double(int x) => x * 2; // pureค้นหาผลข้างเคียง
ฟังก์ชันที่มี ผลข้างเคียงจะสัมผัสหรือเปลี่ยนแปลงโลกภายนอก เช่น การพิมพ์ข้อความหรือการเปลี่ยนค่าระดับโกลบอล ฟังก์ชันประเภทนี้เข้าใจได้ยากกว่า
var log = [];
void impure(int x) => log.add(x); // side effectเหตุผลที่ความบริสุทธิ์ช่วยลำดับการประมวลผล
ฟังก์ชันบริสุทธิ์เชื่อมต่อกันได้อย่างปลอดภัย เพราะแต่ละขั้นขึ้นอยู่กับข้อมูลนำเข้าของตัวเองเท่านั้น คุณจึง ประกอบฟังก์ชันเหล่านี้ได้โดยไม่เกิดเรื่องที่คาดไม่ถึง
เชื่อม map และ where
ลำดับการประมวลผลก็คือสายของการแปลงค่า ให้กรองด้วย where แล้วปรับรูปแบบด้วย map โดยอ่านจากบนลงล่าง
var r = [1, 2, 3, 4]
.where((n) => n.isEven)
.map((n) => n * 10);แต่ละขั้นทำงานแบบ Lazy
where และ map ส่งคืน iterable แบบ lazy ดังนั้นสายทั้งหมดจะทำงานเมื่อถูกนำไปใช้เท่านั้น เพิ่ม toList เพื่อสร้างผลลัพธ์ขึ้นมาจริง
print(r.toList()); // [20, 40]จบด้วย fold
จบลำดับการประมวลผลด้วยการรวมค่า ในที่นี้ fold จะหาผลรวมของค่าที่ผ่านการกรองและแปลงแล้วให้เหลือเป็นตัวเลขเดียว
var sum = [1, 2, 3, 4]
.where((n) => n.isEven)
.fold(0, (a, b) => a + b);ประกอบสองฟังก์ชัน
คุณสามารถสร้างฟังก์ชันใหม่โดยส่งผลลัพธ์จากฟังก์ชันหนึ่งเข้าไปยังอีกฟังก์ชันหนึ่ง การ ประกอบฟังก์ชันนี้อ่านได้ว่า ทำ f แล้วทำ g
int Function(int) compose(
int Function(int) f, int Function(int) g) =>
(x) => g(f(x));ใช้ฟังก์ชันที่ประกอบแล้ว
ประกอบขั้นตอนบริสุทธิ์ขนาดเล็กให้เป็นฟังก์ชันที่นำกลับมาใช้ซ้ำได้ ผลลัพธ์จะทำงานเหมือน ตัวแปลงที่เป็นระเบียบและมีหน้าที่เดียว
var f = compose((x) => x + 1, (x) => x * 2);
print(f(3)); // 8ทำให้แต่ละขั้นมีขนาดเล็ก
ฟังก์ชันบริสุทธิ์ขนาดเล็กที่ตั้งชื่อไว้จะทำให้ลำดับการประมวลผลอธิบายตัวเอง แต่ละขั้นทำงานเดียว ทำให้สายทั้งหมดอ่านเหมือน สูตรการทำงาน
หลีกเลี่ยงการเปลี่ยนข้อมูลนำเข้า
ส่งคืนค่าใหม่แทนการเปลี่ยนอาร์กิวเมนต์เดิมโดยตรง การรักษาข้อมูลนำเข้าให้ ไม่เปลี่ยนแปลงทำให้ลำดับการประมวลผลเชื่อถือได้
List<int> bump(List<int> xs) =>
xs.map((x) => x + 1).toList();ลำดับการประมวลผลแบบเต็ม
เมื่อนำทุกอย่างมารวมกัน: กรอง แปลง แล้วรวมค่า ลำดับการประมวลผลที่อ่านง่ายเพียงชุดเดียวจะเปลี่ยนข้อมูลดิบให้เป็นคำตอบสุดท้าย
var avgx10 = [2, 4, 6]
.map((n) => n * 10)
.reduce((a, b) => a + b);ตรวจสอบอย่างรวดเร็ว
ระบุสิ่งที่ทำให้ฟังก์ชันเป็นฟังก์ชันบริสุทธิ์
ทบทวน
ฟังก์ชันบริสุทธิ์สามารถประกอบเป็นลำดับการประมวลผลแบบ lazy ที่ชัดเจนได้: กรอง แปลงด้วย map แล้วรวมค่า ขั้นตอนเล็ก ๆ สร้างผลลัพธ์ใหญ่ได้อย่างคาดเดาได้ 🎯
คำถามที่พบบ่อย
บทเรียน “การประกอบสายส่งผ่านฟังก์ชันบริสุทธิ์” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การประกอบสายส่งผ่านฟังก์ชันบริสุทธิ์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Dart Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Dart Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การประกอบสายส่งผ่านฟังก์ชันบริสุทธิ์”
เชื่อมการแปลงข้อมูลอย่างคาดเดาได้ คุณปฏิบัติ Dart Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Dart Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Dart Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “การประกอบสายส่งผ่านฟังก์ชันบริสุทธิ์” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Dart Academy นี้ได้ไหม
ได้ บทเรียน Dart Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ฟังก์ชันลำดับสูงและการทำเคอร์รี
- fold, reduce และการขยาย
- ตัววนซ้ำแบบขี้เกียจและตัวสร้างด้วย sync*
- การประกอบสายส่งผ่านฟังก์ชันบริสุทธิ์