Esercizi Generatori JavaScript
Codegrind Team•Jul 12 2024
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' }