Tôi thực sự gặp khó khăn khi hiểu sự khác biệt giữa các mô hình lập trình thủ tục và chức năng .
Đây là hai đoạn đầu tiên từ mục nhập Wikipedia về lập trình hàm :
Trong khoa học máy tính, lập trình hàm là một mô hình lập trình coi việc tính toán là việc đánh giá các hàm toán học và tránh trạng thái và dữ liệu có thể thay đổi. Nó nhấn mạnh vào việc áp dụng các chức năng, trái ngược với phong cách lập trình mệnh lệnh, nhấn mạnh những thay đổi về trạng thái. Lập trình hàm có nguồn gốc từ giải tích lambda, một hệ thống chính thức được phát triển vào những năm 1930 để nghiên cứu định nghĩa hàm, ứng dụng hàm và đệ quy. Nhiều ngôn ngữ lập trình chức năng có thể được xem như là sự phát triển của giải tích lambda.
Trong thực tế, sự khác biệt giữa hàm toán học và khái niệm "hàm" được sử dụng trong lập trình mệnh lệnh là các hàm mệnh lệnh có thể có tác dụng phụ, làm thay đổi giá trị của trạng thái chương trình. Do đó, chúng thiếu tính minh bạch trong tham chiếu, tức là cùng một biểu thức ngôn ngữ có thể dẫn đến các giá trị khác nhau tại các thời điểm khác nhau tùy thuộc vào trạng thái của chương trình đang thực thi. Ngược lại, trong mã hàm, giá trị đầu ra của một hàm chỉ phụ thuộc vào các đối số được nhập vào hàm, do đó, việc gọi một hàm
f
hai lần với cùng một giá trị cho một đối sốx
sẽ tạo ra cùng một kết quảf(x)
cả hai lần. Việc loại bỏ các hiệu ứng phụ có thể làm cho việc hiểu và dự đoán hành vi của một chương trình trở nên dễ dàng hơn nhiều, đây là một trong những động lực chính cho sự phát triển của lập trình chức năng.
Trong đoạn 2 nơi nó nói
Ngược lại, trong mã chức năng, giá trị đầu ra của một hàm chỉ phụ thuộc vào các đối số được nhập vào hàm, do đó, việc gọi một hàm
f
hai lần với cùng một giá trị cho một đối sốx
sẽ tạo ra cùng một kết quảf(x)
cả hai lần.
Đó không phải là trường hợp chính xác tương tự cho lập trình thủ tục?
Điều gì nên tìm kiếm trong thủ tục và chức năng nổi bật?