Theo Wikipedia:
Trong lập trình máy tính, một hàm có thể được mô tả là thuần túy nếu cả hai câu lệnh này về hàm giữ: Hàm luôn đánh giá cùng một giá trị kết quả được đưa ra cùng một giá trị đối số. Giá trị kết quả chức năng không thể phụ thuộc vào bất kỳ thông tin hoặc trạng thái ẩn nào có thể thay đổi khi tiến hành thực hiện chương trình hoặc giữa các lần thực hiện khác nhau của chương trình, cũng không thể phụ thuộc vào bất kỳ đầu vào bên ngoài nào từ các thiết bị I / O. Đánh giá kết quả không gây ra bất kỳ tác dụng phụ hoặc đầu ra có thể quan sát được về mặt ngữ nghĩa, chẳng hạn như đột biến của các đối tượng có thể thay đổi hoặc đầu ra cho các thiết bị I / O.
Tôi tự hỏi nếu có thể viết một hàm tính toán nếu một hàm là thuần túy hay không. Mã ví dụ trong Javascript:
function sum(a,b) {
return a+b;
}
function say(x){
console.log(x);
}
isPure(sum) // True
isPure(say) // False
if (rand(1000000)<2) return WRONG_ANSWER
, việc thăm dò chức năng nhiều lần cho một hành vi nhất quán sẽ không giúp ích. Nhưng, nếu bạn có quyền truy cập vào định nghĩa hàm, bằng chứng là không đáng kể.
say
các cuộc gọi console.log
không trong sạch say
cũng không tinh khiết.