WPML

ปัจจุบัน Functional Programming เป็นหัวข้อที่ได้รับความนิยมอย่างมากในหมู่นักพัฒนา และนั่นก็มีเหตุผล WPML เวอร์ชัน 4.5 เป็นโปรเจกต์ขนาดใหญ่ที่นำเสนอตัวเลือกในการแปลเว็บไซต์ของคุณโดยอัตโนมัติ สำหรับเราแล้ว นี่เป็นช่วงเวลาที่เหมาะสมในการเปลี่ยนมาใช้ Functional Programming เช่นกัน และนี่คือสิ่งที่เราได้เรียนรู้จากกระบวนการนี้

Functional Programming คืออะไร

คุณอาจเคยได้ยินมาว่า Functional Programming ทำให้โค้ดของคุณอ่านง่ายขึ้นและทดสอบได้ง่ายขึ้น แต่เพื่อให้เข้าใจ Functional Programming ได้อย่างถ่องแท้ สิ่งสำคัญคือต้องเข้าใจแนวคิดที่เกี่ยวข้องกับเรื่องนี้

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

สิ่งสำคัญคือต้องสังเกตฟังก์ชันที่ใช้ โดยเฉพาะ Pure Function ซึ่ง Pure Function จะรับข้อมูลและส่งคืนข้อมูล แต่จะไม่มีผลข้างเคียง (side effects) อื่น ๆ สิ่งนี้ทำให้ฟังก์ชันทดสอบได้ง่ายมาก เพราะหากคุณกำหนดพารามิเตอร์เดียวกัน คุณก็จะได้ผลลัพธ์เดียวกัน

พูดง่าย ๆ ก็คือใน Functional Programming ผลลัพธ์จะขึ้นอยู่กับอินพุต

ทำไมต้องเป็น Functional Programming

WPML เป็นโปรเจกต์ที่ใหญ่และซับซ้อน จนถึงเมื่อไม่นานมานี้ เราได้ใช้การเขียนโปรแกรมเชิงวัตถุ (OOP) เพื่อพยายามจัดการกับความซับซ้อนนี้ ความท้าทายหลักประการหนึ่งคือการเขียนโค้ดทดสอบ (Unit test) สำหรับโปรเจกต์ทั้งหมดของเรา เมื่อเขียนโค้ดที่สามารถทดสอบได้ เราต้องแน่ใจว่าการเปลี่ยนแปลงใด ๆ ที่เราทำจะไม่ทำให้โค้ดที่มีอยู่เดิมพัง

การทำ Unit test สำหรับโค้ด OOP นั้นช่วยคุณได้ในระดับหนึ่งเท่านั้น จำเป็นต้องมีการจำลอง (mock) โค้ดที่พึ่งพากัน (code dependencies) เพื่อให้สามารถทดสอบคลาสได้อย่างอิสระ ส่งผลให้การทดสอบมีขนาดใหญ่และซับซ้อนในท้ายที่สุด

ว่ากันว่าจุดเน้นหลักของ Functional Programming คือ "จะแก้ปัญหาอะไร" ในทางตรงกันข้าม การเขียนโปรแกรมเชิงวัตถุจะใช้แนวทาง "จะแก้ปัญหาอย่างไร" เมื่อคำนึงถึงสิ่งนี้ ดูเหมือนว่า Functional Programming จะช่วยให้เราเอาชนะความท้าทายบางอย่างได้

สิ่งที่เราทำ

เมื่อเราพูดถึง Functional Programming ภาษา PHP ไม่ใช่ภาษาแรกที่นึกถึง แม้ว่ามันจะช่วยให้เราสามารถนำสไตล์การเขียนแบบฟังก์ชันมาใช้ได้ก็ตาม ตัวอย่างเช่น ฮุกและฟิลเตอร์ที่ช่วยให้สามารถขยายขีดความสามารถของ WordPress ได้นั้นใช้ฟังก์ชันเพื่อเขียนทับการทำงานของ WordPress

น่าเสียดายที่ไม่มีไลบรารีมาตรฐานสำหรับการใช้กระบวนทัศน์แบบฟังก์ชันที่มากขึ้นใน PHP เราได้ตรวจสอบไลบรารีหลายตัว แต่ไม่มีตัวใดที่มีสิ่งที่เราต้องการอย่างแท้จริงในการเขียนโค้ดที่สื่อความหมายได้ชัดเจนในสไตล์ฟังก์ชัน ดังนั้นเราจึงตัดสินใจเขียนไลบรารีของเราเอง เราได้รับแรงบันดาลใจจากแหล่งข้อมูลต่าง ๆ แต่ส่วนใหญ่มาจากไลบรารีของ Javascript ซึ่งเราพบว่ามีความสมบูรณ์มากกว่า

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

มันได้ผลหรือไม่

เราคิดว่ามันได้ผลอย่างแน่นอน Functional Programming มีคุณสมบัติหลายอย่างที่เป็นประโยชน์ต่อเรา:

  • โครงสร้างโค้ดดีขึ้น
  • โค้ดสื่อความหมายได้ชัดเจนและรัดกุมมากขึ้น
  • การซ้ำซ้อนของโค้ดลดลง
  • ฟังก์ชันมีขนาดเล็กลง จึงง่ายต่อการทดสอบและนำกลับมาใช้ใหม่
  • สามารถนำฟังก์ชันมาประกอบเข้าด้วยกันได้
  • มีการจำลอง (mocking) ในการทดสอบน้อยลง
  • มีการพัฒนาไลบรารีสำหรับการจำลองที่สามารถนำกลับมาใช้ใหม่ได้

แต่แน่นอนว่าไม่มีอะไรสมบูรณ์แบบ แม้ว่า Functional Programming จะมีความรัดกุมและคาดเดาได้ง่ายกว่า แต่ก็มีข้อเสียเช่นกัน โดยเฉพาะอย่างยิ่งหากคุณไม่คุ้นเคยกับมัน:

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

อย่ากลัวที่จะลอง

เป็นที่ชัดเจนว่าความนิยมของ Functional Programming นั้นเป็นมากกว่าแค่กระแส ด้วยลักษณะเฉพาะตัว Functional Programming จึงเหมาะอย่างยิ่งสำหรับงานต่าง ๆ เช่น แมชชีนเลิร์นนิง (machine learning) และการวิเคราะห์ข้อมูล ส่งผลให้บริษัททุกขนาดเริ่มให้ความสนใจหรือแม้แต่เริ่มเปลี่ยนมาใช้ Functional Programming สิ่งนี้ไม่ได้หมายความว่าคุณควรบอกลาการเขียนโปรแกรมเชิงวัตถุไปตลอดกาล แต่มันก็คุ้มค่าที่จะลองใช้ Functional Programming ดู แม้ว่าสุดท้ายแล้วคุณจะไม่ได้ใช้มันเลย แต่ก็มีโอกาสที่คุณจะได้พัฒนาทักษะในฐานะนักพัฒนา

หากคุณสนใจที่จะเรียนรู้เพิ่มเติม เราขอแนะนำให้เริ่มต้นด้วย ซีรีส์บล็อกโพสต์ Composing Software

เมื่อคุณพร้อมที่จะเจาะลึกมากขึ้น ลองดูที่ repo โปรเจกต์ FP ของเรา

คุณรักการเขียนโค้ดเป็นชีวิตจิตใจหรือไม่ มาร่วมงานกับเรา

เรามองหานักพัฒนาที่มีความสามารถโดดเด่นเพื่อมาร่วมทีมกับเราอยู่เสมอ หากคุณคิดว่านั่นคือคุณ อย่ารอช้า สมัครเลยวันนี้

พบว่าสิ่งนี้มีประโยชน์หรือไม่? แชร์บทความนี้: