Skip to main content
0
Basic ProgrammingComputer SystemProgramming Concept

Functional Programming 101 จริงจังแค่ไหน แค่ไหนเรียกฟังก์ชัน ?

Functional Programming คืออะไร ?

Functional Programming เป็นรูปแบบ “การเขียนโปรแกรมเชิงฟังก์ชัน” ถ้าได้ยินชื่ออย่างเดียวอาจจะคิดว่ามีแค่การสร้างฟังก์ชันมาใช้งานแล้วก็จบไป แต่ว่าจริงๆแล้ว Functional Programming ยังมีหลักการและรายละเอียดสำคัญๆอยู่อีกหลายอย่าง

การจะเขียนโปรแกรมแบบ Functional Programming นั้นถ้าจะศึกษาใช้งานให้ถูกต้องจริงๆก็คงจะต้องใช้เวลาในการเรียนรู้และทดลองใช้ เพราะว่า Functional Programming นั้นเกิดขึ้นมาเป็นเวลานานแล้วโดยพัฒนามาจาก Lambda calculus (https://en.wikipedia.org/wiki/Lambda_calculus) จนมีรูปแบบและรายละเอียดต่างๆเป็นของตัวเองเพิ่มขึ้นกลายเป็น Functional Programming ในที่สุด

🐱 หลักการของ Functional Programming

การเขียนโปรแกรมแบบ functional นั้น เราจะเน้นไปที่การใช้ Pure Function ซึ่งหลักการของมันมีแค่ 3 ขั้นตอนง่ายๆคือ 

  1. รับค่า
  2. ดำเนินการบางอย่างกับค่าเหล่านั้น
  3. return ผลลัพธ์ออกไป

ตัวอย่างอันแสนbasic

function add(x, y) {
   return x + y;
}

อ้าว ก็เหมือน function ปกตินี่นา 

ใช่แล้วมันเหมือน แต่ว่า Pure Function นั้นการเขียนของมันจะต้องไม่มีการยุ่งเกี่ยวหรือเปลี่ยนแปลงอะไรก็ตามภายนอก function เด็ดขาด ดังนั้นฟังก์ชันที่เขียนออกมานั้นไม่ว่าจะใส่ค่าอะไรซ้ำไปกี่รอบ ก็จะออกมาเป็นค่าเดิมเสมอ (Immutability) นี่แหละเป็นที่มาของคำว่า

⭐ “Pure Function”

แล้วทำไมต้องใช้? สิ่งสำคัญที่สุดของ Functional Programming นั้น คือการลด side effect ที่เกิดจาก function ที่เราเขียนขึ้นมา

⭐ “Side Effect คืออะไร?”

อย่างที่เรารู้ว่า pure function นั้นไม่ยุ่งกับอะไรภายนอกเลย impure ก็กลับกันคือมีการยุ่งกับโลกภายนอก ไม่ว่าจะใช้ตัวแปร global หรือเปลี่ยนแปลงค่าใดๆภายนอกฟังก์ชัน การกระทำใดๆที่มีผลกับโลกภายนอกล้วนเป็น side effect จาก impure function ทั้งสิ้น

ปัญหาที่ตามมาก็คือเมื่อฟังก์ชันนึงมีผลกระทบกับสิ่งที่อยู่ภายนอกหรือฟังก์ชันอื่นๆที่รับค่านั้นเข้าไป แล้วถ้าเกิดปัญหากับโปรแกรมของเราในซักฟังก์ชันนึง เราจะต้องไปตามดูที่ฟังก์ชันไหนล่ะ? แค่ Pure Function นั้น? หรือ Impure Funtion ทั้งหมด? ด้วยเหตุนี้ทำให้การใช้ functional programming ทำให้โค้ดอ่านและแก้ไขได้ง่าย

ตัวอย่าง Impure Function ที่ทำให้เกิด side effect กับตัวแปร i

let i = 5;
function addFive() {
    i = i+5;
}

⭐ First-Class Function

คือการที่ฟังก์ชันที่สร้างขึ้นนั้นไม่มีข้อจำกัดในการนำไปใช้งานส่วนต่างๆของโปรแกรม รวมไปถึงการนำไปกำหนดเป็นค่าให้กับตัวแปรก็ยังได้ ส่วน

⭐ Higher-Order Function

จะเป็นการที่ “ฟังก์ชัน” สามารถรับ “อีกฟังชัน” มาเป็น Argument และนำไปจัดการได้ รวมถึงการที่รีเทิร์นค่ากลับไปเป็นฟังก์ชันก็ได้เช่นกัน ซึ่งจะทำให้ลด side effect ต่างๆที่จะเกิดขึ้นจากตัวแปรทั่วๆไปได้เยอะมากๆ

// ตัวแปร add มีค่าเป็น ฟังก์ชันได้ (First-class function)
var add = (x, y) => x + y;

// ฟังก์ชัน divideTwo รับฟังก์ชันอื่นเป็น Argument 
// และ return เป็นฟังก์ชันได้ (Higher-order function)
function divideTwo(fn, x, y){
   return fn(x, y)/2;
}

console.log(divideTwo(add, 3, 2));  // 2.5

❓ จำเป็นต้องเปลี่ยนไปใช้รึเปล่า ?

ขึ้นอยู่กับว่างานที่เราทำนั้นเป็นแบบไหน เช่นเดียวกันกับ OOP ที่ไม่ได้เหมาะสมกับทุกงานกับทุกภาษา Functional Programming ก็มีงานที่เหมาะและไม่เหมาะจะนำไปใช้งานเช่นกัน เพราะการเขียนโปรแกรมแต่ละรูปแบบก็จะมีจุดเด่น จุดด้วย ต่างกันไป อย่าง OOP ก็ชูเรื่องการเขียนโค้ดเป็น module ส่วน Functional Programming ก็เน้นการเป็น Pure Function แต่ในสมัยนี้ที่ความนิยมหรือการถูกพูดถึงของมากขึ้นของ Functional Programming ก็ทำให้หลายๆภาษาโปรแกรมพัฒนาให้รองรับการเขียนรูปแบบนี้ ถ้าใครสนใจก็ลองลองศึกษาดูว่าภาษาที่ตัวเองถนัดนั้นรองรับแค่ไหน ส่วนใครที่เคยเขียน OOP มาก่อนก็อาจจะต้องปรับเปลี่ยนแนวคิดกันสักเล็กน้อย ซึ่งวิธีที่ดีที่สุดก็คงจะไม่พ้นการลงมือทำจริงๆนั่นเอง

Functional Language

https://en.wikipedia.org/wiki/List_of_programming_languages_by_type#Functional_languages

ข้อมูลอ้างอิง

Develeper

Author Develeper

More posts by Develeper

Leave a Reply

เราใช้คุกกี้เพื่อพัฒนาประสิทธิภาพ และประสบการณ์ที่ดีในการใช้เว็บไซต์ของคุณ คุณสามารถศึกษารายละเอียดได้ที่ นโยบายความเป็นส่วนตัว และสามารถจัดการความเป็นส่วนตัวเองได้ของคุณได้เองโดยคลิกที่ ตั้งค่า

ตั้งค่าความเป็นส่วนตัว

คุณสามารถเลือกการตั้งค่าคุกกี้โดยเปิด/ปิด คุกกี้ในแต่ละประเภทได้ตามความต้องการ ยกเว้น คุกกี้ที่จำเป็น

ยอมรับทั้งหมด
จัดการความเป็นส่วนตัว
  • คุกกี้ที่จำเป็น
    เปิดใช้งานตลอด

    ประเภทของคุกกี้มีความจำเป็นสำหรับการทำงานของเว็บไซต์ เพื่อให้คุณสามารถใช้ได้อย่างเป็นปกติ และเข้าชมเว็บไซต์ คุณไม่สามารถปิดการทำงานของคุกกี้นี้ในระบบเว็บไซต์ของเราได้
    รายละเอียดคุกกี้

  • คุกกี้สำหรับการติดตามทางการตลาด

    ประเภทของคุกกี้ที่มีความจำเป็นในการใช้งานเพื่อการวิเคราะห์ และ นำเสนอโปรโมชัน สินค้า รวมถึงหลักสูตรฟรี และ สิทธิพิเศษต่าง ๆ คุณสามารถเลือกปิดคุกกี้ประเภทนี้ได้โดยไม่ส่งผลต่อการทำงานหลัก เว้นแต่การนำเสนอโปรโมชันที่อาจไม่ตรงกับความต้องการ
    รายละเอียดคุกกี้

บันทึกการตั้งค่า