Switch e if, quale scegliere?

di il
3 risposte

Switch e if, quale scegliere?

Salve a tutti, può sembrare una domanda banale ma è da un pò che ho questo pallino in testa.

Quando usare Switch e quando If ?

Rileggendo dal mio libro mi viene semplicemente detto che lo switch è usato come alternativa all'If, guardando gli esempi capisco che può avere un aiuto di organizzazione, ma oltre a questo?
Leggendo online trovo articoli di velocità tra Switch e If, oltre a tanti pareri differenti, dalla Docs FORSE ho trovato una risposta:
L'istruzione switch viene spesso usata come alternativa a un costrutto if-else se una singola espressione viene testata in base a tre o più condizioni.
Ne deduco che debba usare lo switch se ho tre o più condizioni da valutare per una singola espressione.(???)

Prima di pormi questo problema, usavo lo switch ogni qual volta ci fosse un controllo booleano ==, mentre l'if per espressioni più complesse.
Banalmente, mi sentivo più "pulito" a scrivere uno switch in questo modo piuttosto che usare un If.

Switch(x)
{
    case 0:
	x = 1;
    break;
}
Questo perchè mi sembrava più corretto eseguire dei test booleani == tramite switch che per un certo senso è creato apposta, piuttosto che usare l'If che è dedicato ad espressioni più articolate.

È giusto usarlo in questo modo? c'è un modo "ufficiale" che possa seguire?
Grazie a tutti.

3 Risposte

  • Re: Switch e if, quale scegliere?

    Ciao in realtà non c'e' un modo ufficiale, tutto a sta a cosa devi fare... Ad esempio se devo controllare il valore di una variabile non ha senso utilizzare un costrutto switch ma è più comodo un if...else.
    Se pero' devo controllare il giorno della settimana di un determinato anno o quando i possibili valori della variabile possono essere 3,4, 8, 10 o di piu
    switch (day) {
    case 1:
    System.out.println("Monday");
    break;
    case 2:
    System.out.println("Tuesday");
    break;
    case 3:
    System.out.println("Wednesday");
    break;
    case 4:
    System.out.println("Thursday");
    break;
    case 5:
    System.out.println("Friday");
    break;
    case 6:
    System.out.println("Saturday");
    break;
    case 7:
    System.out.println("Sunday");
    break;
    }
    In questo caso sarebbe inutile e brutto fare if (day == "Monday") else if.... ecc
    Inoltre calcola che switch viene usato anche per eseguire del codice quando la variabile assume un valore che non rientra nella nostra gestione (ad esempio per input dell'utente:
    default:
    System.out.println("Nessun giorno corrispondente");
    break;
  • Re: Switch e if, quale scegliere?

    STAddo ha scritto:


    Quando usare Switch e quando If ?
    Il costrutto switch ti torna utile quando devi controllare il valore di una variabile e prendere una "strada" differente a seconda dei valori che essa può assumere: quando questi valori iniziano a essere tanti, in assenza del costrutto switch saresti costretto a scrivere una pletora di if...else if uno dopo l'altro, mentre lo switch ti consente di "saltare" direttamente al blocco che corrisponde a un valore specifico e rendere più leggibile il codice.

    Per la verità, io tendo a usare il meno possibile costrutti if in generale, e quando si tratta di passare a uno switch a maggior ragione - ossia in presenza di numerose possibili alternative - utilizzo la programmazione a oggetti (OOP) e il polimorfismo per sostituire qualsiasi if/switch con una architettura più aperta, che permetta di implementare queste "strade" alternative in classi distinte, con la possibilità di aggiungerne altre all'occorrenza in qualsiasi momento scrivendo nuovo codice, ovvero senza modificare il codice esistente (vedi Open/Closed Principle per motivazioni e approfondimenti).

    Ciao!
  • Re: Switch e if, quale scegliere?

    Grazie per le risposte, in sostanza, nel caso in cui mi ritrovi a dover valutare un qualcosa che posso valutare sia con l'if che con lo switch la scelta ricadrà sulla struttura che mantenga più leggibile/chiaro il codice.
Devi accedere o registrarti per scrivere nel forum
3 risposte