Functional Programming

เมื่อวานอยู่ๆ ก็นึกสนใจขึ้นมา ก็ไล่อ่านไปเรื่อยๆ แล้วเจอบล็อกที่อธิบายเป็นภาษาไทยได้ดีอยู่สองที่นี้

ของที่แรกเขียนยาวและลงลึกมาก ภาษาออกจะเป็นวิชาการสักหน่อย (คือลักษณะการใช้ภาษาของคนเขียนเหมือนจะเป็นอาจารย์เลยแฮะ) แต่ก็ได้รายละเอียด ได้ความเข้าใจอย่างชัดเจนเกี่ยวกับหัวข้อนี้ดีเลย … มีอยู่ 5 บทความที่เกี่ยวข้อง ต้องลองไล่อ่านทั้งหมดดูนะ

ส่วนของอีกที่หนึ่ง พอหลังจากอ่านที่แรกจบมาแล้ว ก็เหมือนเป็นสรุปให้เข้าใจได้ง่ายๆ ทบทวนให้ชัดเจนได้ดีเลย (ในเว็บนี้ยังมีบทความอื่นๆ ที่น่าสนใจอีกเยอะด้วยนะ)

http://www.hpc-thai.com/?p=150
http://www.tamemo.com/post/80/functional-programming-should-be-your/

เอาบางส่วนมาแปะสรุปแบบคร่าวๆ เกี่ยวกับ Functional Programming (ที่เหลือถ้าอยากเข้าใจต้องตามอ่านรายละเอียดต่อเองนะ อันนี้คร่าวๆ มาก 5555)

“Functional Programming มันคือ paradigm การเขียนโปรแกรมแบบหนึ่ง”

“ภาษาส่วนใหญ่ที่เรารู้จัก (เช่น php, C, ฯลฯ) จะเป็น paradigm ที่ชื่อว่า Imperative ที่มองการเขียนโปรแกรมเป็นคำสั่งเรียงต่อกัน มีเงื่อนไขมีการวนรอบ”

“ภาษา C# นั้นใช้ paradigm ที่ชื่อว่า Object-Oriented ซึ่งมองการเขียนโปรแกรมแยกออกเป็นหน่วยอิสระที่เรียกว่าวัตถุ จากนั้นสานสัมพันธ์กันระหว่างวัตถุด้วยกัน (แต่ส่วนย่อยในการทำงานจริงๆ ของ C# ก็ยังคงอาศัย Imperative เป็นตัวขับเคลื่อนอยู่ดี)”

“มี paradigm อีกอย่างหนึ่งที่เรียกว่า Declarative จะเป็นแนวทางที่ไม่บอกวิธีทำ บอกเพียงความต้องการและให้คอมพิวเตอร์ตัดสินใจหาวิธีทำเอง ถ้านึกไม่ออกให้นึกถึง SQL ที่เวลาเราเขียน เราจะแค่บอกว่า อยากได้รายชื่อคนอายุต่ำกว่า 20 ไปหามาให้หน่อย ส่วนจะหามาได้อย่างไร ผู้เขียนโปรแกรมไม่ต้องเข้าไปยุ่ง สุดท้ายได้ข้อมูลมาก็แล้วกัน … ผู้เขียนจะไม่ต้องมาคิดเป็นขั้นตอน ว่า ต้องทำอะไร อย่างไร ตามลำดับ บลาๆๆ”

“Functional Programming ก็จะเป็นแนวคิดที่ โน้มเอียงมาคล้ายๆ แนวนี้แหละ …”

“Imperative นั้นมีนิยามในการทำงานหลักอยู่สี่ประการ บางครั้งเรียกว่า Control Flow บ้าง Structured Programming บ้าง ดังนี้

  • Sequence คำสั่งมีลำดับการทำงาน คำสั่งต่อคำสั่งทำงานเรียงลงมา
  • Selection คำสั่งมีเงื่อนไข มีทางแยกเช่นพวกคำสั่ง if, case, switch นั่นเอง
  • Iteration คือการวนรอบที่รู้จักกันพวก repeat, for, while นั่นเอง
  • Subroutine ก็คือ function หรือ procedure นั่นเอง

การเขียนโปรแกรมก็คือการเอาหลักการทำงานที่ว่ามาข้างบนนี้ มารวมกันนี่แหละ”

“แต่ … Functional Programming จะไม่ได้ยึดหลักการแบบนี้นะ คือ ไม่ได้ยึดว่าจะต้องเขียนโปรแกรมแบบมีลำดับการทำงาน ไล่เรียงลงมา, ไม่มีวนรอบ Loop อะไรพวกนี้”

ตอนแรกที่ทำความเข้าใจ Functional Programming อาจจะตะกุกตะกักซะหน่อย มันก็เหมือนกับตอนที่เพิ่งเปลี่ยนจาก เขียนโปรแกรมธรรมดามาใช้ OOP นั่นแหละ

ตอนเริ่มแรกคงต้องลืมคอนเซ็ปการเขียนโปรแกรมแบบเดิมๆ ไปก่อนแล้วจะเริ่มใหม่ได้ง่ายกว่า

เพราะหลายๆ อย่างใน Functional Programming อาจจะไม่ค่อยเป็นภาษาคน อ่านค่อนข้างยาก เห็นแล้วเดาไม่ออกว่าบรรทัดนี้เอาไว้ทำอะไร จะรู้สึกว่าไอ้ Functional Programming เป็นตัวประหลาดไปเลย เพราะเราเคยชินกับการเขียนโปรแกรมด้วยภาษาแนว Imperative นี่แหละ

ป.ล. ผมไม่เขียนบทความเองนะ ขี้เกียจ เน้นแปะเอา 55555+

Show your support

Clapping shows how much you appreciated Tosapon Chaiwong’s story.