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