08

Switch e Menu ๐ŸŽฏ

Impara lo switch statement per gestire molte condizioni in modo pulito! Costruirai un sistema di tab interattivo professionale.

โฑ๏ธ 40 minuti ๐ŸŽฏ Livello: Intermedio ๐Ÿ“ฑ 1 Menu Tab Completo

๐Ÿ“š Benvenuto nella Lezione 8!

Bentornato Navigator! ๐ŸŽฏ Hai imparato if/else per le condizioni. Ma cosa fai quando hai 10, 20 o piรน opzioni da gestire?

Lo switch statement รจ perfetto per questi casi! รˆ piรน pulito, leggibile e performante quando hai molte condizioni basate su UN valore.

In questa lezione creerai un sistema di tab interattivo come quelli di app professionali! ๐Ÿ“ฑ

๐ŸŽฏ Cosa Imparerai

  • โœ… Sintassi switch statement completa
  • โœ… Case multipli e break
  • โœ… Default case per gestire il resto
  • โœ… Quando usare switch vs if/else
  • โœ… Navigazione tra contenuti
  • โœ… Progetto: Menu tab con 4 sezioni

๐ŸŽฎ Dove Si Usa Switch?

Switch รจ perfetto per:

  • ๐Ÿ“ฑ Menu navigazione: Home, About, Services, Contact
  • ๐ŸŽฎ Stati di gioco: menu, playing, paused, game-over
  • ๐ŸŒ Lingue: it, en, es, fr, de
  • ๐Ÿ“… Giorni settimana: lun, mar, mer...
  • ๐ŸŽจ Temi: light, dark, blue, custom

๐Ÿ‘€ Demo: Selettore Giorni

Clicca un giorno e vedi il messaggio cambiare!

๐Ÿ“… Che giorno รจ oggi?

Seleziona un giorno

๐Ÿค” Come Funziona?

Il codice usa uno switch:

switch (giorno) {
    case 'lun':
        messaggio = '๐Ÿ’ผ Inizio settimana!';
        break;
    case 'ven':
        messaggio = '๐ŸŽ‰ Ultimo giorno!';
        break;
    case 'sab':
    case 'dom':
        messaggio = '๐Ÿ–๏ธ Weekend!';
        break;
    default:
        messaggio = 'Giorno lavorativo';
}

๐Ÿ”€ Switch Statement: Sintassi Base

Switch valuta UN'espressione e confronta con diversi case:

Sintassi

JavaScript
switch (espressione) {
    case valore1:
        // Codice se espressione === valore1
        break;
    
    case valore2:
        // Codice se espressione === valore2
        break;
    
    default:
        // Codice se nessun case corrisponde
}

Esempio Pratico: Voti

JavaScript
const voto = 'A';

switch (voto) {
    case 'A':
        console.log('๐Ÿ† Eccellente!');
        break;
    
    case 'B':
        console.log('๐Ÿ‘ Ottimo!');
        break;
    
    case 'C':
        console.log('โœ… Buono');
        break;
    
    case 'D':
        console.log('โš ๏ธ Sufficiente');
        break;
    
    default:
        console.log('โŒ Insufficiente');
}

๐Ÿ“Œ Come Funziona

  1. Switch valuta l'espressione (es. voto)
  2. Confronta con ogni case usando ===
  3. Quando trova un match, esegue quel codice
  4. Il break esce dallo switch
  5. default viene eseguito se nessun case corrisponde

๐Ÿ›‘ Break e Default

Perchรฉ serve Break?

Senza break, il codice continua nei case successivi!

JavaScript - SENZA Break (โŒ)
const giorno = 1;

switch (giorno) {
    case 1:
        console.log('Lunedรฌ');
        // Manca break! โŒ
    case 2:
        console.log('Martedรฌ');
        // Anche questo viene eseguito!
    case 3:
        console.log('Mercoledรฌ');
}

// Output: Lunedรฌ, Martedรฌ, Mercoledรฌ ๐Ÿ˜ฑ

Case Multipli (Fall-Through Voluto)

A volte vuoi che piรน case eseguano lo stesso codice:

JavaScript - Fall-Through (โœ…)
const giorno = 'sab';

switch (giorno) {
    case 'lun':
    case 'mar':
    case 'mer':
    case 'gio':
    case 'ven':
        console.log('๐Ÿ’ผ Giorno lavorativo');
        break;
    
    case 'sab':
    case 'dom':
        console.log('๐Ÿ–๏ธ Weekend!');
        break;
    
    default:
        console.log('โš ๏ธ Giorno non valido');
}

Default Case

JavaScript
const lingua = 'jp';

switch (lingua) {
    case 'it':
        saluto = 'Ciao';
        break;
    case 'en':
        saluto = 'Hello';
        break;
    case 'es':
        saluto = 'Hola';
        break;
    default:
        saluto = 'Hello (default)'; // 'jp' non รจ nei case
}

โš ๏ธ Ricorda!

  • SEMPRE metti break (tranne fall-through voluto)
  • default รจ opzionale ma consigliato
  • default puรฒ essere ovunque, ma di solito รจ alla fine

โš–๏ธ Switch vs If/Else

Quando usare switch e quando if/else?

Criterio Switch If/Else
Confronti โœ… UN valore con molte opzioni Condizioni diverse
Leggibilitร  โœ… Piรน pulito con 5+ opzioni Meno chiaro con molti else if
Flessibilitร  Solo uguaglianza (===) โœ… Qualsiasi condizione (>, <, &&, ||)
Performance โœ… Piรน veloce con molti case Controlla ogni condizione

Esempio Confronto

Con Switch โœ…
switch (ruolo) {
    case 'admin':
        accesso = 'completo';
        break;
    case 'editor':
        accesso = 'modifica';
        break;
    case 'viewer':
        accesso = 'lettura';
        break;
    default:
        accesso = 'guest';
}
Con If/Else
if (ruolo === 'admin') {
    accesso = 'completo';
} else if (ruolo === 'editor') {
    accesso = 'modifica';
} else if (ruolo === 'viewer') {
    accesso = 'lettura';
} else {
    accesso = 'guest';
}

โœ… Quando Usare Cosa

Usa Switch quando:

  • Confronti UN valore con 5+ opzioni
  • Hai valori esatti da confrontare (stringhe, numeri)
  • Menu, navigazione, stati

Usa If/Else quando:

  • Condizioni complesse (&&, ||, >, <)
  • Range di valori (etร  > 18)
  • Condizioni diverse tra loro

โœ๏ธ Esercizio Guidato: Calculator Display

Crea una calcolatrice che mostra operazioni diverse usando switch!

๐Ÿ“‹ Cosa Devi Fare

  1. Seleziona i 2 input numeri e il select operazione
  2. Seleziona il bottone calcola e il div risultato
  3. Aggiungi evento click al bottone
  4. Prendi i valori e convertili in numeri
  5. Usa switch per gestire le 4 operazioni (+, -, *, /)
  6. Mostra il risultato con operatore emoji

๐Ÿ“ Struttura HTML da Usare

Ecco gli elementi HTML con cui lavorerai:

HTML - Elementi Calcolatrice
<!-- Numeri -->
<input id="calcNum1" type="number" value="10">
<input id="calcNum2" type="number" value="5">

<!-- Operazione -->
<select id="calcOperation">
    <option value="+">Addizione</option>
    <option value="-">Sottrazione</option>
    <option value="*">Moltiplicazione</option>
    <option value="/">Divisione</option>
</select>

<!-- Controlli -->
<button id="btnCalculate">Calcola</button>
<div id="calcResult"></div>
๐Ÿ“Œ IDs da Usare:
  • #calcNum1 โ†’ Primo numero
  • #calcNum2 โ†’ Secondo numero
  • #calcOperation โ†’ Operazione (valori: "+", "-", "*", "/")
  • #btnCalculate โ†’ Bottone calcola
  • #calcResult โ†’ Div risultato

๐Ÿงฎ Calcolatrice

๐ŸŽฎ Progetto Finale: Menu Tab Profilo Completo

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

Creerai un sistema di tab professionale con:

  • โœ… 4 tab: Info, Skills, Projects, Settings
  • โœ… Switch per gestire la navigazione
  • โœ… Contenuti diversi per ogni tab
  • โœ… Tab attivo evidenziato
  • โœ… Animazioni smooth

๐ŸŽฏ Obiettivi del Progetto

  • โœ… Click su tab โ†’ mostra contenuto corrispondente
  • โœ… Nascondi tutti i panel prima
  • โœ… Switch per decidere quale mostrare
  • โœ… Classe 'active' sul tab selezionato
  • โœ… Classe 'active' sul panel visibile

๐Ÿ“ Riferimento Elementi HTML

HTML - IDs Principali
<!-- Tab Buttons (4) -->
<button id="tabInfo" class="profile-tab">๐Ÿ“‹ Info</button>
<button id="tabSkills">๐Ÿ’ช Skills</button>
<button id="tabProjects">๐Ÿš€ Projects</button>
<button id="tabSettings">โš™๏ธ Settings</button>

<!-- Content Panels (4) -->
<div id="panelInfo" class="profile-panel">...</div>
<div id="panelSkills">...</div>
<div id="panelProjects">...</div>
<div id="panelSettings">...</div>

๐Ÿ“ฑ Il Profilo Live

๐Ÿ‘จโ€๐Ÿ’ป
Mario Rossi
Full Stack Developer
๐Ÿ“ง
Email
mario.rossi@email.com
๐Ÿ“ฑ
Telefono
+39 123 456 7890
๐Ÿ“
Sede
Milano, Italia
JavaScript
React
Node.js
CSS

๐Ÿš€ Progetti Recenti

๐ŸŒ
E-commerce Platform
Full-stack application
๐Ÿ“ฑ
Mobile App
React Native

โš™๏ธ Preferenze

Notifiche Email
Profilo Pubblico

๐Ÿ’ป Completa il Codice del Menu Tab

๐ŸŽฏ Conclusione: Sei un Navigation Master!

โœ… Recap: Cosa Hai Imparato

  • โœ… Sintassi switch completa (case, break, default)
  • โœ… Fall-through voluto per case multipli
  • โœ… Quando usare switch vs if/else
  • โœ… Switch per navigazione menu
  • โœ… Sistema tab completo e professionale!

๐Ÿš€ Challenge: Vai Oltre!

Migliora il menu tab aggiungendo:

  • โŒจ๏ธ Keyboard Nav: Frecce destra/sinistra per cambiare tab
  • ๐Ÿ”— URL Sync: Sincronizza tab con URL hash (#info)
  • ๐Ÿ’พ Salva Tab: Ricorda ultimo tab visitato
  • ๐Ÿ“Š Piรน Sezioni: Aggiungi tab Activity, Messages
  • ๐ŸŽจ Temi: Switch per cambiare tema profilo

๐ŸŽ‰ Hai Completato il Modulo 2!

Complimenti! Hai padroneggiato Decisioni e Logica! Ora sai usare if/else, switch, validazioni e molto altro! ๐ŸŽ“

Prossimo modulo: Loop e Ripetizioni ๐Ÿ”„