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