การเขียนโปรแกรมเชิงฟังก์ชัน

จากวิกิพีเดีย สารานุกรมเสรี

ในวิทยาการคอมพิวเตอร์ การเขียนโปรแกรมเชิงฟังก์ชันเป็นกระบวนทัศน์การเขียนโปรแกรมที่รูปแบบการสร้างโครงสร้างและส่วนประกอบของโปรแกรมคอมพิวเตอร์ซึ่งปฏิบัติต่อการคำนวณว่าเป็นการประเมินผลฟังก์ชันทางคณิตศาสตร์และหลีกเลี่ยงการเปลี่ยนแปลงสถานะและข้อมูลที่เปลี่ยนแปลงได้ โดยเป็นกระบวนทัศน์การเขียนโปรแกรมเชิงประกาศซึ่งหมายความ[1]หรือการประกาศ[2]แทนข้อความสั่ง ในโปรแกรมเชิงฟังก์ชัน ค่าผลลัพธ์ของฟังก์ชันขึ้นอยู่กับ[ อาร์กิวเมนต์]ที่นำเข้าสู่ฟังก์ชันเท่านั้น ดังนั้นการเรียกฟังก์ชัน f สองครั้งด้วยค่าอาร์กิวเมนต์ x เดียวกันจะให้ค่าผลลัพธ์ f(x) เท่ากันทุกครั้ง การกำจัดผลข้างเคียง ได้แก่ การเปลี่ยนแปลงสถานะที่ไม่ขึ้นกับสิ่งที่นำเข้าฟังก์ชัน สามารถทำให้ง่ายขึ้นที่จะทำความเข้าใจและพยากรณ์พฤฒิกรรมของโปรแกรมซึ่งเป็นหนึ่งในแรงจูงใจของการพัฒนาของการเขียนโปรแกรมเชิงฟังก์ชัน

การเขียนโปรแกรมเชิงฟังก์ชันมีรากฐานมาจากแคลคูลัสแลมบ์ดาซึ่งเป็นระบบรูปนัยที่พัฒนาในคริสต์ทศวรรษ 1930 เพื่อค้นEntscheidungsproblem นิยามของฟังก์ชัน การประยุกต์ฟังก์ชัน และการเรียกซ้ำ ภาษาการใส่รายละเอียดเพิ่มจากแคลคูลัสแลมบ์ดา กระบวนทัศน์การเขียนโปรแกรมเชิงประกาศที่เป็นที่รู้จักอื่น ๆ การเขียนโปรแกรมเชิงตรรกะ มีพื้นฐานอยู่บนความสัมพันธ์เชิงตรรกะ[3]

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

ภาษาโปรแกรมเชิงฟังก์ชันโดยเฉพาะภาษาโปรแกรมเชิงฟังก์ชันบริสุทธิ เช่น ภาษาโฮปถูกในความสำคัญในวงการวิชาการมากกว่าในการพัฒนาซอฟต์แวร์เชิงพาณิชย์ อย่างไรก็ตามภาษาโปรแกรมที่มีชื่อเสียงซึ่งสนับสนุนการเขียนโปรแกรมเชิงฟังก์ชัน เช่น ภาษาคอมมอนลิสป์ ภาษา Scheme[4][5][6][7] ภาษา Clojure[8][9] ภาษา Wolfram[10] (หรือ ภาษา Mathematica) ภาษา Racket[11] ภาษาเออร์แลง[12][13][14] ภาษา OCaml[15][16] ภาษา Haskell[17][18] และภาษาเอฟชาร์ป[19][20] ใช้ในโปรแกรมประยุกต์เชิงอุตสาหกรรมและเชิงพาณิชย์โดยองค์กรอย่างกว้างขวาง การเขียนโปรแกรมเชิงฟังก์ชันยังได้รับการรองรับในภาษาเขียนโปรแกรมเฉพาะทางบางภาษา เช่น ภาษาอาร์ (สถิติ)[21] ภาษาเจ ภาษาเค และภาษาคิวจาก Kx Systems (การวิเคราะห์ทางการคลัง) XQuery/XSLT (เอกซ์เอ็มแอล)[22][23] และภาษาโอปอล[24] ภาษาเชิงประกาศเฉพาะทางที่ใช้งานอย่างกว้างขวางเช่น ภาษาสอบถามเชิงโครงสร้าง และ Lex/Yacc ใช้บางส่วนประกอบของการเขียนโปรแกรมเชิงฟังก์ชันโดยเฉพาะใน eschewing วัตถุที่เปลี่ยนแปลงได้.[25]

การเขียนโปรแกรมเชิงฟังก์ชันสามารถทำได้ในภาษาที่ไม่ได้ออกมาเฉพาะสำหรับการเขียนโปรแกรมเชิงฟังก์ชัน ตัวอย่างเช่น ภาษาเพิร์ลซึ่งเป็นภาษาโปรแกรมเชิงคำสั่งมีบทหนึ่งของหนังสือที่อธิบายว่าประยุกต์แนวคิดการเขียนโปรแกรมเชิงฟังก์ชันอย่างไร[26] นี้ยังเป็นจริงสำหรับภาษาพีเอชพี[27] C++11, ภาษาจาวา 8 และภาษาซีชาร์ป 3.0 ภาษาจูเลียก็เสนอความสามารถการเขียนโปรแกรมเชิงฟังก์ชันเช่นกัน กรณีที่น่าสนใจคือภาษาสกาลา[28] – มักเขียนในเชิงฟังก์ชัน แต่ก็มีการแสดงตนของผลข้างเคียงและสถานะที่เปลี่ยนแปลงได้ ซึ่งทำให้จัดอยู่ในบริเวณสีเทาระหว่างภาษาเชิงคำสั่งและเชิงฟังก์ชัน

อ้างอิง[แก้]

  1. "Declaration vs. expression style - HaskellWiki". 
  2. "Declaration vs. expression style - HaskellWiki". 
  3. 3.0 3.1 Hudak, Paul (September 1989). "Conception, evolution, and application of functional programming languages" (PDF). ACM Computing Surveys 21 (3): 359–411. doi:10.1145/72551.72554. 
  4. Clinger, Will (1987). "MultiTasking and MacScheme". MacTech 3 (12). สืบค้นเมื่อ 2008-08-28. 
  5. Hartheimer, Anne (1987). "Programming a Text Editor in MacScheme+Toolsmith". MacTech 3 (1). สืบค้นเมื่อ 2008-08-28. 
  6. Kidd, Eric. "Terrorism Response Training in Scheme". CUFP 2007. สืบค้นเมื่อ 2009-08-26. 
  7. Cleis, Richard. "Scheme in Space". CUFP 2006. สืบค้นเมื่อ 2009-08-26. 
  8. "The useR! 2006 conference schedule includes papers on the commercial use of R". R-project.org. 2006-06-08. สืบค้นเมื่อ 2011-06-20. 
  9. Chambers, John M. (1998). Programming with Data: A Guide to the S Language. Springer Verlag. pp. 67–70. ISBN 978-0-387-98503-9. 
  10. "Wolfram Language Guide: Functional Programming". 2015. สืบค้นเมื่อ 2015-08-24. 
  11. "State-Based Scripting in Uncharted 2". Archived from the original on 2012-12-15. สืบค้นเมื่อ 2011-08-08. 
  12. "Who uses Erlang for product development?". Frequently asked questions about Erlang. สืบค้นเมื่อ 2007-08-05. 
  13. Armstrong, Joe (June 2007). "A history of Erlang". Third ACM SIGPLAN Conference on History of Programming Languages. San Diego, California. สืบค้นเมื่อ 2009-08-29. 
  14. Larson, Jim (March 2009). "Erlang for concurrent programming". Communications of the ACM 52 (3): 48. doi:10.1145/1467247.1467263. 
  15. Minsky, Yaron; Weeks, Stephen (July 2008). "Caml Trading — experiences with functional programming on Wall Street". Journal of Functional Programming (Cambridge University Press) 18 (4): 553–564. doi:10.1017/S095679680800676X. สืบค้นเมื่อ 2008-08-27. 
  16. Leroy, Xavier. "Some uses of Caml in Industry". CUFP 2007. สืบค้นเมื่อ 2009-08-26. 
  17. "Haskell in industry". Haskell Wiki. สืบค้นเมื่อ 2009-08-26. "Haskell has a diverse range of use commercially, from aerospace and defense, to finance, to web startups, hardware design firms and lawnmower manufacturers." 
  18. Hudak, Paul; Hughes, J.; Jones, S. P.; Wadler, P. (June 2007). "A history of Haskell: being lazy with class". Third ACM SIGPLAN Conference on History of Programming Languages. San Diego, California. doi:10.1145/1238844.1238856. สืบค้นเมื่อ 2013-09-26. 
  19. Mansell, Howard (2008). "Quantitative Finance in F#". CUFP 2008. สืบค้นเมื่อ 2009-08-29. 
  20. Peake, Alex (2009). "The First Substantial Line of Business Application in F#". CUFP 2009. สืบค้นเมื่อ 2009-08-29. 
  21. Department of Applied Math, University of Colorado. "Functional vs. Procedural Programming Language". Archived from the original on 2007-11-13. สืบค้นเมื่อ 2006-08-28. 
  22. Dimitre Novatchev. "The Functional Programming Language XSLT — A proof through examples". TopXML. สืบค้นเมื่อ May 27, 2006. 
  23. David Mertz. "XML Programming Paradigms (part four): Functional Programming approached to XML processing". IBM developerWorks. สืบค้นเมื่อ May 27, 2006. 
  24. OPtimized Applicative Language
  25. Donald D. Chamberlin and Raymond F. Boyce (1974). "SEQUEL: A structured English query language". Proceedings of the 1974 ACM SIGFIDET: 249–264. 
  26. Dominus, Mark J. (2005). Higher-Order Perl. Morgan Kaufmann. ISBN 1-55860-701-3. 
  27. Holywell, Simon (2014). Functional Programming in PHP. php[architect]. ISBN 9781940111056. 
  28. "Effective Scala". Scala Wiki. สืบค้นเมื่อ 2012-02-21. "Effective Scala."