📢 Nuovo Corso Laravel API disponibile!

Esercizi Generatori JavaScript

Ecco degli esercizi con soluzione per praticare l’uso dei generator in JavaScript.

Esercizio 1: Generatore Semplice

Creare un generatore che restituisca i numeri da 1 a 3.
function* generaNumeri() {
yield 1;
yield 2;
yield 3;
}
const generatore = generaNumeri();
console.log(generatore.next().value); // 1
console.log(generatore.next().value); // 2
console.log(generatore.next().value); // 3
console.log(generatore.next().done); // true

Esercizio 2: Generatore di Fibonacci

Creare un generatore che restituisca i numeri della sequenza di Fibonacci.
function* generaFibonacci() {
let [a, b] = [0, 1];
while (true) {
yield a;
[a, b] = [b, a + b];
}
}
const generatore = generaFibonacci();
console.log(generatore.next().value); // 0
console.log(generatore.next().value); // 1
console.log(generatore.next().value); // 1
console.log(generatore.next().value); // 2
console.log(generatore.next().value); // 3

Esercizio 3: Generatore con Input Esterno

Creare un generatore che accetti input esterno utilizzando il metodo `next`.
function* generaConInput() {
const a = yield "Inserisci primo valore:";
const b = yield "Inserisci secondo valore:";
yield a + b;
}
const generatore = generaConInput();
console.log(generatore.next().value); // Inserisci primo valore:
console.log(generatore.next(5).value); // Inserisci secondo valore:
console.log(generatore.next(10).value); // 15

Esercizio 4: Generatore con Loop

Creare un generatore che restituisca i numeri da 1 a 5 utilizzando un loop.
function* generaNumeri() {
for (let i = 1; i <= 5; i++) {
yield i;
}
}
const generatore = generaNumeri();
for (let valore of generatore) {
console.log(valore); // 1 2 3 4 5
}

Esercizio 5: Generatore Infinito

Creare un generatore che generi numeri interi consecutivi indefinitamente.
function* generaNumeri() {
let i = 0;
while (true) {
yield i++;
}
}
const generatore = generaNumeri();
console.log(generatore.next().value); // 0
console.log(generatore.next().value); // 1
console.log(generatore.next().value); // 2
// e così via...

Esercizio 6: Generatore di Valori Alternati

Creare un generatore che alterni due valori.
function* generaAlternato() {
while (true) {
yield "A";
yield "B";
}
}
const generatore = generaAlternato();
console.log(generatore.next().value); // A
console.log(generatore.next().value); // B
console.log(generatore.next().value); // A
console.log(generatore.next().value); // B

Esercizio 7: Gestione degli Errori nei Generator

Creare un generatore che gestisca errori lanciati con il metodo `throw`.
function* generaConErrore() {
try {
yield 1;
yield 2;
yield 3;
} catch (e) {
console.log("Errore catturato:", e.message);
}
}
const generatore = generaConErrore();
console.log(generatore.next().value); // 1
console.log(generatore.next().value); // 2
console.log(generatore.throw(new Error("Qualcosa è andato storto"))); // Errore catturato: Qualcosa è andato storto
console.log(generatore.next().done); // true

Esercizio 8: Generatore di Oggetti

Creare un generatore che restituisca oggetti con proprietà incrementali.
function* generaOggetti() {
let id = 1;
while (true) {
yield { id: id++, nome: `Oggetto ${id}` };
}
}
const generatore = generaOggetti();
console.log(generatore.next().value); // { id: 1, nome: 'Oggetto 2' }
console.log(generatore.next().value); // { id: 2, nome: 'Oggetto 3' }
console.log(generatore.next().value); // { id: 3, nome: 'Oggetto 4' }