Functional Programming มี ข้อดี-ข้อเสีย อะไรบ้าง

20-มิ.ย.-18

คัมภีร์เทพ IT

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

เกี่ยวกับ Functional Programming

ก่อนหน้านี้มีเพียง Developer เพียงส่วนน้อยที่รู้จักแนวคิด Functional Programming แต่ช่วง 2-3 ปีที่ผ่านมา พบว่า Code base ของ Application รายใหญ่ๆ ส่วนมากหันมาใช้แนวคิด Functional Programming กันมากขึ้น ที่เป็นแบบนี้ก็เพราะ:

  1. Functional Programming ช่วยให้คุณสามารถเขียน Code ที่กระชับและคาดเดาได้ง่ายมากขึ้น
  2. ง่ายในการ Test (แม้ช่วงแรกของการเริ่มต้นเรียนรู้ จะไม่ใช่เรื่องที่ทำได้ง่ายนัก)

Feature เด่นๆ ของ Software Development ที่ใช้ Functional Programming คือ

  • มี Combination ของ Pure Functions
  • เลี่ยงการใช้ Share Stat, Mutable data และ Side-effects
  • มีความเป็น Declarative Approach มากกว่า Imperative Approach

เรามาดูคำศัพท์ที่เกี่ยวข้องกันดีกว่า

Pure Functions: เป็น Deterministic Functions (ไม่ว่าจะใส่ Input อะไรไป ก็จะได้ Output แบบเดิมเสมอ) ที่ไม่เกิด Side-effects ใดๆ

Shared state: ปัญหาหลักของ Shared state คือ คุณจำเป็นต้องรู้ที่มาที่ไปทั้งหมดของแต่ละตัวแปรที่ Function นั้นใช้ ดังนั้น Functional Programming จึงหลีกเลี่ยงการใช้ Shared state เพื่อจะได้ไม่เกิดปัญหาตามมา จึงหันมาใช้หลัก Immutable data structures และ Pure computations เพื่อจะได้ไม่ต้องมีการแก้ไขข้อมูล

Immutability: นี่ถือเป็นส่วนสำคัญของ Functional Programming (ป้องกันการเปลี่ยนแปลงค่าของตัวแปร)

Side-effects: คือ ผลกระทบที่จะเกิดต่อ Function อื่นและต่อมันเอง การที่ Functional Programming หลีกเลี่ยง Side-effects ก็เพราะ ให้ง่ายต่อการทำความเข้าใจและง่ายต่อการ Test

ทำไมต้องเป็นแบบ Declarative approach?

Imperative approach จะยึดตามหลักการของการของ Workflow control ซึ่งเน้นในเรื่องที่ว่า “จะทำอย่างไร” ในขณะที่ Declarative approach จะอธิบายเกี่ยวกับ Data flow และเน้นในเรื่องที่ว่า “จะทำอะไร” นอกจากนี้ Imperative code ส่วนใหญ่มักใช้ instructions (operators) ขณะที่ Declarative ดูจะอาศัย expressions ซะมากกว่า

ข้อเสีย ของ Function Programming

  • ไม่มี Vocabulary ที่มีประสิทธิภาพสำหรับ Functional Languages โดย Purely Functional Vocabularies ทำงานช้ากว่า  Hash tables และมันก็สร้างปัญหาในบาง Applications ได้ สำหรับ Developer ส่วนใหญ่แล้ว ไม่ค่อยมีใครสังเกตเห็นข้อบกพร่องนี้
  • Functional programming ไม่เหมาะสำหรับ Algorithm ในงานเกี่ยวกับ Graph เนื่องจากมันทำงานได้ช้า

ข้อดี ของ Function Programming

  • Functional Programming มีชื่อเสียงในเรื่อง high-level abstractions เพราะมันซ่อนรายละเอียดของ Routine operations อย่างเรื่องของ Iterating ไว้ มันทำให้ Code สั้นลง และมี Errors เล็กน้อยที่พอจะสามารถยอมรับได้
  • ใน Functional Programming มี Language primitives อยู่เพียงเล็กน้อย พวก Class ต่างๆ ที่เป็นที่รู้จักจะไม่ถูกใช้ใน Functional Programming, แทนที่จะสร้าง unique description ของ object ที่มี operations ในรูปแบบของ methods แต่ใน Functional Programming มีหลาย Language primitives ที่ถูก optimize มาแล้วเป็นอย่างดี
  • เนื่องจากภาษาและ Structure ที่มีความยืดหยุ่น มันจึงช่วยให้ Functional Programming Developer เข้าใกล้ปัญหาได้มากขึ้น นอกจากนี้มันยังมี Tools ที่ทั้งใหม่และน่าสนใจสำหรับการแก้ปัญหาที่ซับซ้อน ซึ่ง OOP Developers มักจะละเลยไป
  • การใช้ Functional Programming ช่วยให้สามารถเขียน Code ได้อย่างถูกต้องและรวดเร็ว อีกทั้งการ Test และ Debug ก็ทำได้สะดวกขึ้น

Functional Programming Use Cases

ปัจจุบัน Developers พยายามแก้ปัญหาเกี่ยวกับ parallel processing และทำงานกับ Big Data ซึ่งด้วยวการ parallelizing process ของ data เหล่านี้ คุณจะได้ผลลัพธ์ที่ต้องการอย่างรวดเร็วมาก นอกจากนี้ต้องไม่ลืมการคำนวณแบบ decentralized (distributed) อย่าง Blockchain ด้วย จากหลักการของ Function Programming, Functional code ดูจะเป็นตัวเลือกที่เหมาะสมที่สุดสำหรับการคำนวณ การใช้ API techniques ขั้นพื้นฐาน จะช่วยการประมวลผลแบบ parallel ของ Code รวมทั้งเรื่อง Support ต่างๆ ทำได้สะดวกขึ้น

ถ้าคุณต้องการเรียนรู้ Function Programming

  1. ให้ผ่อนคลาย ตอนแรกมันอาจจะยาก วางสิ่งที่คุณรู้ไว้ก่อน แล้วพยายามเรียนรู้แนวทางและหลักการใหม่ๆ
  2. เริ่มต้นด้วยงานเล็กๆ ก่อน
  3. เริ่มต้นด้วยการเรียนรู้ Haskell แล้วไปที่ Scala (หรือ F#) เพื่อให้เข้าใจหลักการของ Function Programming ได้ดียิ่งขึ้น
  4. คุณสามารถหา Resources ที่มีประโยชน์ได้จาก:

- หนังสือ Learn You a Haskell

- หนังสือ ‘Real-World Functional Programming: With Examples in F # and C #

- คอร์ส Programming Languages, Part A (เพื่อศึกษา Concepts ของ Function Programming โดยใช้ SML, Racket, Ruby)

- คอร์ส Introduction to Functional Programming

GitHub (for JS) + Awesome FP JS

ที่มา:  https://itnext.io/

 

 

รับตำแหน่งงานไอทีใหม่ๆ ด้วยบริการ IT Job Alert

 

อัพเดทบทความจากคนวงในสายไอทีทาง LINE ก่อนใคร
อย่าลืมแอดไลน์ @techstarth เป็นเพื่อนนะคะ

เพิ่มเพื่อน

 

บทความที่เกี่ยวข้อง