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

การประกอบสายส่งผ่านฟังก์ชันบริสุทธิ์

เชื่อมการแปลงข้อมูลอย่างคาดเดาได้

การประกอบสายส่งผ่านฟังก์ชันบริสุทธิ์ เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. ฟังก์ชันลำดับสูงและการทำเคอร์รี
  2. fold, reduce และการขยาย
  3. ตัววนซ้ำแบบขี้เกียจและตัวสร้างด้วย sync*
  4. การประกอบสายส่งผ่านฟังก์ชันบริสุทธิ์
← กลับไปที่ Dart Academy