Pertanyaannya adalah:
- Apakah generator melanggar paradigma pemrograman fungsional? Mengapa atau mengapa tidak?
- Jika ya, dapatkah generator digunakan dalam pemrograman fungsional dan bagaimana caranya?
Pertimbangkan yang berikut ini:
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
The downCounter
Metode muncul bernegara. Selain itu, panggilan downCounter
dengan input yang sama, akan selalu menghasilkan output yang sama. Namun, pada saat yang sama, panggilan next()
tidak menghasilkan hasil yang konsisten.
Saya tidak yakin apakah generator merusak paradigma pemrograman fungsional atau tidak karena dalam contoh ini counter
adalah objek generator dan pemanggilan next()
akan menghasilkan hasil yang sama seperti objek generator lain yang dibuat dengan sama persis maxValue
.
Selain itu, memanggil someCollection[3]
array akan selalu mengembalikan elemen keempat. Demikian pula, memanggil next()
empat kali pada objek generator juga akan selalu mengembalikan elemen keempat.
Untuk lebih banyak konteks, pertanyaan-pertanyaan ini muncul saat mengerjakan kata pemrograman . Orang yang menjawab pertanyaan, mengajukan pertanyaan apakah generator dapat digunakan dalam pemrograman fungsional atau tidak.