PlusMagi's Blog By Pitt Phunsanit Backend,Database Rust Iterators: การประยุกต์ใช้ map, filter, fold และ collect ในสไตล์ Functional Programming

Rust Iterators: การประยุกต์ใช้ map, filter, fold และ collect ในสไตล์ Functional Programming

ในโลกของการวิเคราะห์ข้อมูลขนาดใหญ่ (Big Data) การจัดการชุดข้อมูลที่ต้องผ่านกระบวนการแปลงรูป (Transformation) และการคัดกรอง (Filtering) อย่างต่อเนื่องนั้น ต้องการแนวคิดการเขียนโค้ดที่ทั้งมีประสิทธิภาพและอ่านง่าย แนวคิดเชิงฟังก์ชัน (Functional Programming – FP) เข้ามาตอบโจทย์นี้ด้วยการเน้นการเปลี่ยนแปลงสถานะให้น้อยที่สุด (Immutability) และใช้กระบวนการ ‘การไหล’ ของข้อมูล (Data Flow) แทนการแก้ไขโดยตรง ซึ่งช่วยให้โค้ดของเรามีความชัดเจน ลดโอกาสเกิดบั๊ก และทำให้การบำรุงรักษาระบบทำได้ง่ายขึ้น

การประยุกต์ใช้แนวคิด Functional ใน PostgreSQL

แม้ว่า PostgreSQL จะเป็นระบบจัดการฐานข้อมูลเชิงสัมพันธ์ (Relational Database) แต่เราสามารถประยุกต์ใช้หลักการของ Functional Programming เข้ากับการเขียน Query ได้อย่างทรงพลัง โดยมองว่าการ Query ข้อมูลคือกระบวนการ ‘Iterator’ ที่ข้อมูลไหลผ่านฟังก์ชันต่างๆ เพื่อถูกแปลงและกรองให้เหลือผลลัพธ์ที่ต้องการ

1. Filter (การคัดกรอง) – เทียบเท่ากับ .filter()

การคัดกรองคือการเลือกเฉพาะแถวข้อมูลที่ตรงตามเงื่อนไขที่กำหนด ซึ่งใน SQL เราใช้คำสั่ง WHERE clause นี่คือการกรองข้อมูลที่ง่ายและทรงประสิทธิภาพที่สุด

2. Map (การแปลงค่า) – เทียบเท่ากับ .map()

การแปลงค่าคือการเปลี่ยนแปลงโครงสร้างหรือรูปแบบของข้อมูลในคอลัมน์โดยไม่เปลี่ยนแถวข้อมูลหลัก เช่น การเปลี่ยนตัวพิมพ์เล็กเป็นตัวพิมพ์ใหญ่ หรือการคำนวณค่าใหม่จากคอลัมน์เดิม ใน PostgreSQL เราใช้ฟังก์ชัน (Functions) ต่างๆ เช่น UPPER() หรือการคำนวณคณิตศาสตร์ใน SELECT list

3. Fold / Reduce (การรวมค่า) – เทียบเท่ากับ .fold()

การรวมค่าคือการนำค่าทั้งหมดในกลุ่มมาคำนวณรวมกันให้เหลือผลลัพธ์สุดท้ายเพียงค่าเดียว (Aggregation) ใน PostgreSQL เราใช้คำสั่ง GROUP BY ร่วมกับฟังก์ชันรวม (Aggregate Functions) เช่น SUM(), COUNT(), หรือ AVG()

ตัวอย่างการประยุกต์ใช้ใน PostgreSQL

สมมติว่าเรามีตาราง products ที่เก็บข้อมูลสินค้า และเราต้องการคำนวณยอดรวมของสินค้าในหมวดหมู่ ‘Electronics’ ที่มีราคาสูงกว่า 100 และแปลงชื่อหมวดหมู่ให้เป็นตัวพิมพ์ใหญ่ก่อนแสดงผล

SQL

-- สร้างตารางจำลอง (Setup) --<br>CREATE TABLE products (id INT, category VARCHAR, price NUMERIC, stock INT);<br>INSERT INTO products VALUES (1, 'electronics', 150.00, 10);<br>INSERT INTO products VALUES (2, 'books', 25.00, 50);<br>INSERT INTO products VALUES (3, 'Electronics', 300.00, 5);<br>INSERT INTO products VALUES (4, 'Books', 50.00, 20);<br><br>-- Query ที่ใช้หลักการ Functional Programming --<br>SELECT<br>    UPPER(category) AS transformed_category, -- Map: แปลงค่า category เป็นตัวพิมพ์ใหญ่<br>    SUM(price * stock) AS total_value -- Fold/Reduce: คำนวณผลรวมของมูลค่า<br>FROM<br>    products<br>WHERE<br>    price > 100 AND category = 'Electronics' -- Filter: กรองเฉพาะสินค้าที่ตรงเงื่อนไข<br>GROUP BY<br>    transformed_category;

บทสรุป

การทำความเข้าใจแนวคิด Map, Filter, และ Fold ในบริบทของ PostgreSQL ไม่ได้หมายถึงการใช้ Syntax ของภาษา Rust แต่หมายถึงการปรับเปลี่ยนมุมมองในการออกแบบ Query ให้เป็นกระบวนการไหลของข้อมูลที่ชัดเจน (Data Pipeline) การใช้ WHERE (Filter), การใช้ฟังก์ชัน (Map), และการใช้ GROUP BY ร่วมกับ Aggregate Functions (Fold) จะช่วยให้ Query ของเรามีประสิทธิภาพสูง อ่านง่าย และเป็นไปตามหลักการของ Functional Programming อย่างแท้จริง ซึ่งเป็นทักษะสำคัญสำหรับ Senior Data Architect ในยุคปัจจุบัน