Các câu hỏi là:
- Do máy phát điện phá vỡ mô hình lập trình chức năng? Tại sao hay tại sao không?
- Nếu có, máy phát điện có thể được sử dụng trong lập trình chức năng không và bằng cách nào?
Hãy xem xét những điều sau đây:
function * downCounter(maxValue) {
yield maxValue;
yield * downCounter(maxValue > 0 ? maxValue - 1 : 0);
}
let counter = downCounter(26);
counter.next().value; // 26
counter.next().value; // 25
// ...etc
Các downCounter
phương pháp có vẻ không quốc tịch. Đồng thời, gọi downCounter
với cùng một đầu vào, sẽ luôn dẫn đến cùng một đầu ra. Tuy nhiên, đồng thời, việc gọi điện next()
không mang lại kết quả nhất quán.
Tôi không chắc liệu các trình tạo có phá vỡ mô hình lập trình chức năng hay không bởi vì trong ví dụ counter
này là một đối tượng trình tạo và do đó việc gọi next()
sẽ tạo ra kết quả giống như một đối tượng trình tạo khác được tạo với cùng một chính xác maxValue
.
Đồng thời, việc gọi someCollection[3]
một mảng sẽ luôn trả về phần tử thứ tư. Tương tự, gọi next()
bốn lần trên một đối tượng trình tạo cũng sẽ luôn trả về phần tử thứ tư.
Đối với nhiều bối cảnh hơn, những câu hỏi này đã được đặt ra trong khi làm việc trên một kata lập trình . Người trả lời câu hỏi, đưa ra câu hỏi liệu máy phát điện có thể được sử dụng trong lập trình chức năng hay không và liệu chúng có giữ trạng thái hay không.