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+