09

Cicli che Creano ๐ŸŽจ

Scrivi le istruzioni una volta sola e lascia che il computer le ripeta: con un ciclo for crei decine di elementi HTML in un colpo solo!

โฑ๏ธ 45 minuti ๐ŸŽฏ Livello: Intermedio ๐Ÿ–ผ๏ธ 1 Galleria Dinamica

๐Ÿ“š Benvenuto nella Lezione 9!

Inizia il Modulo 3! ๐Ÿ”„ Finora ogni istruzione veniva eseguita una volta sola. Ma se devi creare 100 bottoni, 12 foto o una tabellina da 1 a 10, non vorrai scrivere 100 righe quasi uguali!

Un ciclo ripete un blocco di codice tutte le volte che serve. Tu scrivi la regola, il computer fa il lavoro noioso.

In questa lezione userai i cicli per costruire la pagina: griglie, elenchi, tabelle e una galleria di foto completa. ๐Ÿ–ผ๏ธ

๐ŸŽฏ Cosa Imparerai

  • โœ… Le tre parti del ciclo for
  • โœ… Seguire un ciclo giro per giro
  • โœ… Creare elementi HTML con createElement e append
  • โœ… Costruire HTML con una stringa e innerHTML
  • โœ… while, break e continue
  • โœ… Progetto: galleria di foto con filtri

๐ŸŽฎ Dove Si Usano i Cicli?

Ogni volta che una pagina mostra tanti elementi simili, dietro c'รจ quasi sempre un ciclo:

  • ๐Ÿ›’ Negozi online: la griglia dei prodotti
  • ๐Ÿ“ธ Instagram: le foto del profilo
  • ๐Ÿ’ฌ Chat: l'elenco dei messaggi
  • ๐Ÿ“… Calendari: i giorni del mese
  • ๐ŸŽฎ Giochi: le caselle di una griglia

๐Ÿ‘€ Demo: Generatore di Quadrati

Scegli quanti quadrati vuoi e premi Genera: un ciclo li crea uno alla volta, ognuno con il suo numero e il suo colore.

Il ciclo non รจ ancora partito

๐Ÿค” Come Funziona?

Tutto il lavoro lo fanno queste poche righe:

for (let i = 1; i <= 12; i++) {
    const quadrato = document.createElement('div');
    quadrato.textContent = i;
    griglia.append(quadrato);
}

Con 12 o con 60 quadrati il codice รจ lo stesso: cambia solo il numero dopo <=.

๐Ÿ” Il Ciclo For: le Tre Parti

Il for si usa quando sai quante volte ripetere. Tra le parentesi ci sono tre parti separate da punto e virgola:

JavaScript
for (let i = 1; i <= 5; i++) {
    console.log('Giro numero ' + i);
}
// Giro numero 1, Giro numero 2, ... Giro numero 5
let i = 1 Partenza

Crea il contatore. Viene eseguita una volta sola, all'inizio.

i <= 5 Condizione

Controllata prima di ogni giro: se รจ vera si entra, se รจ falsa il ciclo finisce.

i++ Passo

Eseguito alla fine di ogni giro: aumenta il contatore di 1.

๐Ÿข Prova: il For al Rallentatore

Premi Passo โ–ถ per eseguire il ciclo un'istruzione alla volta e guarda come cambia i.

for (let i = 1; i <= 3; i++) {
console.log('Ciao ' + i);
}
i = โ€”
Console

Premi ยซPassoยป per iniziare.

Contare in Altri Modi

JavaScript
// All'indietro: 10, 9, 8 ... 1
for (let i = 10; i >= 1; i--) { console.log(i); }

// Di due in due: 0, 2, 4 ... 20
for (let i = 0; i <= 20; i += 2) { console.log(i); }

// Accumulare: la somma da 1 a 100
let somma = 0;
for (let i = 1; i <= 100; i++) {
    somma += i;
}
console.log(somma); // 5050

โš ๏ธ Attenzione all'Ultimo Giro

  • i < 5 si ferma a 4; i <= 5 arriva a 5: controlla sempre il primo e l'ultimo valore.
  • La variabile che accumula (come somma) va creata prima del ciclo, altrimenti riparte da zero a ogni giro.

๐Ÿงฑ Creare HTML con i Cicli

Nelle lezioni precedenti hai modificato elementi che esistevano giร . Con i cicli puoi crearne di nuovi. Ci sono due modi.

Modo 1: createElement e append

JavaScript
const lista = document.querySelector('#lista');

for (let i = 1; i <= 5; i++) {
    const voce = document.createElement('li');   // 1. crea l'elemento
    voce.textContent = `Elemento ${i}`;        // 2. riempilo
    voce.classList.add('voce');                  // 3. dagli uno stile
    lista.append(voce);                          // 4. mettilo nella pagina
}

Modo 2: una stringa di HTML

JavaScript
let html = '';

for (let i = 1; i <= 5; i++) {
    html += `<li class="voce">Elemento ${i}</li>`;   // aggiungi un pezzo alla stringa
}

lista.innerHTML = html;   // una sola scrittura nella pagina, alla fine
CriteriocreateElementStringa + innerHTML
Leggibilitร Piรน righe, ma ogni passo รจ chiaroโœ… Compatto, sembra HTML
Eventiโœ… Puoi aggiungere subito addEventListenerGli eventi vanno aggiunti dopo
Testo dell'utenteโœ… textContent รจ sempre sicuroAttenzione: l'HTML scritto dall'utente verrebbe eseguito

๐Ÿ“Œ Regola Pratica

Per gli esercizi va bene la stringa con innerHTML. Quando un elemento deve reagire ai click, o il testo arriva da un input dell'utente, usa createElement.

โš ๏ธ Errore Classico

Scrivere lista.innerHTML = ... dentro il ciclo con = invece di +=: a ogni giro cancelli quello che c'era e alla fine resta solo l'ultimo elemento!

โ™พ๏ธ While, Break e Continue

Il while ("finchรฉ") si usa quando non sai quante volte ripetere: continua finchรฉ la condizione resta vera.

JavaScript
// Lancia un dado finchรฉ non esce 6
let lanci = 0;
let dado = 0;

while (dado !== 6) {
    dado = Math.floor(Math.random() * 6) + 1;
    lanci++;
}
console.log(`Ci sono voluti ${lanci} lanci`);

Break e Continue

JavaScript
// break: esce subito dal ciclo
for (let i = 1; i <= 100; i++) {
    if (i * i > 50) {
        console.log('Primo quadrato oltre 50: ' + i);   // 8
        break;
    }
}

// continue: salta il resto del giro e passa al successivo
for (let i = 1; i <= 10; i++) {
    if (i % 3 === 0) continue;   // salta 3, 6, 9
    console.log(i);
}
SituazioneCiclo giusto
So quante volte ripetere (12 quadrati, da 1 a 10โ€ฆ)for
Ripeto finchรฉ succede qualcosa (esce 6, l'utente indovinaโ€ฆ)while
Come while, ma almeno una voltado ... while

โš ๏ธ Il Ciclo Infinito

Se dentro il while niente cambia la condizione, il ciclo non finisce mai e la scheda del browser si blocca. Controlla sempre che a ogni giro qualcosa si avvicini alla fine (qui: dado cambia a ogni lancio).

โœ๏ธ Esercizio Guidato: Generatore di Tabelline

L'utente sceglie un numero e il programma crea la sua tabellina da 1 a 10, una riga alla volta.

๐Ÿ“‹ Cosa Devi Fare

  1. Seleziona l'input, il bottone e il contenitore delle righe
  2. Aggiungi un evento click al bottone
  3. Leggi il numero e convertilo con Number()
  4. Svuota il contenitore
  5. Con un for da 1 a 10 crea una riga per ogni moltiplicazione
  6. Bonus: dai la classe pari alle righe con risultato pari

๐Ÿ“ Struttura HTML da Usare

HTML - Elementi Tabellina
<input id="tabNumero" type="number" value="7">
<button id="btnTabellina">Crea tabellina</button>
<div id="tabRighe"></div>
๐Ÿ“Œ IDs da Usare:
  • #tabNumero โ†’ Il numero scelto
  • #btnTabellina โ†’ Bottone che crea la tabellina
  • #tabRighe โ†’ Contenitore dove aggiungere le righe (classe CSS per ogni riga: riga-tab)

โœ–๏ธ Tabellina

๐Ÿ–ผ๏ธ Progetto Finale: Galleria Foto Dinamica

รˆ il momento del progetto vero! ๐Ÿ“ธ

Le "foto" sono descritte in un elenco giร  pronto nel codice. Tu scrivi i cicli che:

  • โœ… creano una scheda per ogni foto
  • โœ… mostrano solo le foto della categoria scelta
  • โœ… contano quante foto sono visibili
  • โœ… evidenziano le foto preferite โญ

๐Ÿ“Œ Un'Anteprima della Prossima Lezione

Le foto sono in un array, cioรจ un elenco: foto[0] รจ la prima, foto[1] la seconda e foto.length dice quante sono. Gli array li vedrai bene nella lezione 10; qui ti basta sapere che con for (let i = 0; i < foto.length; i++) li scorri tutti, partendo da 0.

๐ŸŽฏ Obiettivi del Progetto

  • โœ… Funzione mostraGalleria(categoria) che svuota e ricrea la galleria
  • โœ… Dentro un for sulle foto, continue salta quelle di un'altra categoria
  • โœ… Un contatore dice quante foto sono state mostrate
  • โœ… I bottoni dei filtri chiamano la funzione con la categoria giusta

๐Ÿ“ Riferimento Elementi HTML

HTML - IDs Principali
<!-- Filtri: data-categoria dice quale categoria mostrare -->
<button class="filtro" data-categoria="tutte">Tutte</button>
<button class="filtro" data-categoria="natura">Natura</button>
<!-- ... cittร , animali, cibo -->

<div id="galleria"></div>        <!-- qui vanno le schede -->
<div id="galleriaConta"></div>   <!-- "N foto" -->
๐Ÿ“Œ Classi CSS giร  pronte:
  • foto-card โ†’ la scheda; con preferita ha il bordo dorato
  • foto-immagine โ†’ il riquadro colorato con l'emoji (lo sfondo si imposta con style.background)
  • foto-titolo โ†’ il titolo sotto l'immagine
  • filtro attivo โ†’ il bottone del filtro selezionato

๐Ÿ“ธ La Galleria Live

๐Ÿ’ป Completa il Codice della Galleria

๐ŸŽฏ Conclusione: Sei un Loop Master!

โœ… Recap: Cosa Hai Imparato

  • โœ… Il for e le sue tre parti: partenza, condizione, passo
  • โœ… Contare in avanti, all'indietro e a salti; accumulare una somma
  • โœ… Creare elementi con createElement + append oppure con una stringa e innerHTML
  • โœ… while quando non sai quante volte ripetere, break e continue
  • โœ… Una galleria completa con filtri e contatore!

๐Ÿš€ Challenge: Vai Oltre!

Migliora la galleria:

  • โญ Solo preferite: un filtro che mostra solo le foto con preferita: true
  • ๐Ÿ” Ricerca: un input che mostra solo i titoli che contengono il testo scritto (includes)
  • ๐Ÿ”ข Statistiche: con un ciclo conta quante foto ci sono per ogni categoria e mostralo sui bottoni
  • ๐ŸŽจ Scacchiera: con due cicli uno dentro l'altro crea una scacchiera 8ร—8 di quadrati bianchi e neri

๐ŸŽ‰ Hai Completato la Lezione 9!

Ora sai far lavorare il computer al posto tuo: con poche righe crei tutti gli elementi che vuoi. ๐ŸŽ“

Prossimo passo: gli array, cioรจ gli elenchi di dati che hai appena usato nella galleria. ๐Ÿ“‹