IF contro SWITCH

Introduzione

Questo testo è la traduzione di “IF vs Switch” scritto da Ray Hunter .

Quando iniziai a programmare in C molti dei miei programmi erano cosparsi di istruzioni IF. E’ un buon modo di programmare questo o ci sono metodi migliori? Qualcosa come lo SWITCH? Che cosa è meglio usare e come questo può aiutarci a velocizzare il tempo di esecuzione dei nostri script?

Ecco dei consigli da tenere a mente

1.         Le condizioni nell’istruzione IF devono essere semplici.

2.         Evitare condizioni complesse, se possibile.

3.         Se si usano più di due o tre IF/ELSE, riconsiderare la logica della nostra applicazione.

Ecco ora la solita vecchia domanda a cui occorre dare una risposta: quando si usa l’IF e quando invece lo SWITCH?

Alcuni suggerimenti che mi hanno aiutato negli anni:

 

Usare l’istruzione IF quando

1.         si ha una variabile di cui non si conosce il valore;

2.         si ha bisogno di un valore di ritorno che sia TRUE o FALSE.

 

Usare l’istruzione SWITCH quando

1.         si ha una variabile che potrebbe assumere diversi valori di cui se ne conosce preventivamente il contenuto.

 

Ora gli esempi.

Esempio 1

Scenario : Abbiamo una variabile di cui non si conosce il valore, ma che certamente è un numero.

Soluzione : Usiamo un istruzione IF.

 

    If ($a < 0 )

   echo ‘$a è meno di 0’;

elseif ($a > 0 )

   echo ‘$a è più di 0’;

else

   echo ‘$a è 0’;

?>

 

 

Perché non abbiamo utilizzato lo SWITCH qui?

Semplicemente perché non sappiamo il valore che $a potrebbe assumere. Noi possiamo soltanto dire se $a è minore, uguale o maggiore rispetto allo 0 (zero).

Esempio 2

Scenario : Sappiamo che la variabile $a potrebbe essere uguale a uno di questi numeri: 1, 5, 10, 15, 35. Ma quale?

Usiamo un' istruzione SWITCH per definirlo.

 

    switch($a){

   case 1:

     echo “$a =$a”;

     break;

   case 5:

     echo “$a =$a”;

     break;

   case 10:

     echo “$a =$a”;

     break;

   case 15:

     echo “$a =$a”;

     break;

   case 35:

     echo “$a =$a”;

     break;

default:

     echo “$a sconosciuto”;

     break;

}

?>

 

 

Cosa ha fatto SWITCH più di IF ?

La risposta è semplice: dato che $a può contenere un numero limitato di possibilità, noi le abbiamo semplicemente valutate. Per questo SWITCH è stato più veloce rispetto ad un’istruzione IF.

Note : Noi abbiamo anche incluso l’istruzione default; Default è un catch-all nelle condizioni SWITCH proprio come ELSE dopo un IF.

Informazioni aggiuntive (IF annidate)

Le IF annidate sono IF, IF-ELSE all’interno di altre istruzioni IF.

Esempio:

 

    if ($a) {

   // Istruzione if annidata

   if ($a > 0)

     echo “$a = $a”;

   else   

     echo “$a è troppo piccolo”;

}

else {

   // fa qualche altra cosa;

}

?>

 

Cose da sapere

1.         Non bisogna essere pigri, ma usare lo SWITCH ogni volta che può avere un senso: SWITCH tende ad essere più veloce.

2.         Se si usa l’IF, si deve essere sicuri che il proprio codice in cui viene definita la condizione sia il più veloce possibile – non si sa mai quali evoluzioni potrebbe avere.

3.         Se si hanno condizioni complesse bisogna cercare di scinderle in qualche modo usando le IF annidate. Queste risulteranno più veloci al posto di una lunga lista di istruzioni IF.

4.         Cercare di definire sempre (io insisto – sempre) all’inizio di una serie di IF la condizione che ha la maggior probabilità che risulti vera. Cioè, se il 90% delle volte $a è maggiore di 0, fare in modo che l’istruzione sia:

 

    if ($a > 0)

   echo "$a è maggiore";

elseif ($a < 0 )

   echo "$a è minore";

else

   echo "$a è 0";

 

Le ragioni sono semplici: quando l’analisi (parser) valuta la prima condizione a true, esso esegue il codice all’interno delle parentesi, dopo di che salterà i restanti ELSE. Nei casi in cui sussistono condizioni probabili che restituiscano true all’analisi finale, nella maggior parte dei casi si dovrà valutare ciascuna di loro e l’applicazione risulterà lenta.

Ringraziamo per la gentile concessione Ray Hunter e PHPBeginner.com.



 

 

Ti potrebbe interessare anche

commenta la notizia

C'è 1 commento
Graziano
Hai qualche domanda da fare?