🚀 Nuova versione beta disponibile! Feedback o problemi? Contattaci

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' }