(FP) มอง Function ให้เป็นเครื่องหมาย +, —, *, /
สวัสดีครับ สำหรับเพื่อนๆที่สนใจใน Functional Programming คาดว่าทุกคนน่าจะรู้จักกับ Concept ของ Purity กับ Immutability กันมาบ้างแล้วนะครับ
ในบทความนี้ผมจะเปรียบเทียบ Pure Function กับเครื่องหมาย +, — , *, /
ก่อนอื่นขอทวนนิดนึง Function ใน Functional Programming Paradigm เป็น Pure Function ซึ่ง Pure Function เนี่ยมันขึ้นอยู่กับ Argument ที่รับเข้ามาเท่านั้น อีกอย่างนึงคือ Pure Function จะไม่เปลี่ยนค่าของ Argument
ซึ่งจากการที่ Pure Function ไม่ได้ส่งผลต่อสิ่งแวดล้อมภายนอกเลย (ไม่ได้เปลี่ยนแปลง State ใดๆทั้งสิ้น) นี้ก็ส่งผลให้โปรแกรมของเรา Immutability
หากเราวิเคราะห์ Pure Function ให้ลึกลงไป จริงๆแล้วมันก็เหมือนกับเครื่องหมาย +, — , *, / เพราะเวลาเพื่อนๆเอา Input ใส่ไปใน Pure Function => Output ที่ออกมาขึ้นอยู่กับค่า Input เท่านั้น (จะเรียกมันอีกสักล้านครั้ง ถ้าใส่ Input ค่าเดิม มันก็ได้ Output ค่าเดิม)
ยกตัวอย่าง
เครื่องหมาย +
const sum = (value1, value2) => value1 + value25 + 5sum(5, 5)
เครื่องหมาย /
const divide = (dividend, divisor) => dividend / divisor6 / 2divide(6, 2)
ในทางคณิตศาสตร์นั้นเครื่องหมายเหล่านี้สามารถเอามาใช้ต่อๆกัน เพื่อแก้โจทย์ตัวเลขที่ยากขึ้น
หาค่าเฉลี่ย
อย่างเช่นผมต้องการ หาค่าเฉลี่ยนของ [1, 2, 3, 4, 5, 6] ผมก็ต้องเอากลุ่มของเครื่องหมาย + กับ / มาต่อๆกัน
(1 + 2 + 3 + 4 + 5 + 6) / 6
ลองมอง + กับ / ให้เป็น Function สิ (เริ่มเห็นพลังของ Pure Function แล้วยัง)
const sum = (total, current) => total + currentconst divide = (dividend, divisor) => dividend / divisorconst size = array => array.lengthconst total = array => array.reduce(sum, 0)const average = array => divide(total(array), size(array))average([1, 2, 3, 4, 5, 6]) // (1 + 2 + 3 + 4 + 5 + 6) / 6
สุดท้ายแล้วลองมองตัวเลขให้กลายเป็น Data(ข้อมูล) ที่ไหลไปยังกลุ่มของ Pure Function ดูครับ นี้หละครับคือ 1 ในพลังของ Functional Programming
คาดว่าเพื่อนๆอ่านบทความนี้จบ คงจะเห็นข้อดีของ FP และเข้าใจมันมากขึ้นไม่มากก็น้อยนะครับผม :) ขอบคุณครับ /\
อ่านแล้วถูกใจช่วยกดหัวใจเป็นกำลังใจให้นิดนึงนะครับ
แล้วก็ฝากแฟนเพจด้วยจ้า : )
https://www.facebook.com/imkrish.developer/
“ Happiness is Only Real When Shared ”
ที่เริ่มเขียน Blog เพราะไปเจอ Quote นี้นี้แหละครับ :)