|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Nov 2014
Messaggi: 6
|
If e switch Java
Salve a tutti,
![]() vorrei porvi delle domande che riguardano il linguaggio Java, e più precisamente if (else) e switch: - Quale dei due è più veloce? - In che condizioni è meglio usare uno invece dell'altro? Ad esempio: Codice:
if (a == 1) { // istruzioni } else // Che poi non so se è meglio creare if nidificati o in cascata in questo caso... secondo voi? { if (a == 2) { // istruzioni } } // oppure switch (a) { case 1: // istruzioni break; case 2: // istruzioni break; } So anche che esiste in Java la possibilità di fare cose del genere (io vengo dal Pascal quindi capitemi se questa cosa che per me è eccezionale in realtà non lo è): Codice:
boolean c1 = true; boolean c2 = true; boolean c3 = false; if(c1) { // il blocco viene eseguito } else if(c2) { // il blocco non viene eseguito anche se 'c2' è 'true' } if(c3) { // il blocco non viene eseguito perché 'c3' è 'false' } else if(c2) { // il blocco viene eseguito, poiché 'c2' è 'true' mentre 'c3' è 'false' } Grazie MILLE a chi risponderà a tutte le mie domande ![]() ![]() ps: ma perché è stata creata questa distinzione, uno non bastava??? ![]() Ultima modifica di Newbyte98 : 24-11-2014 alle 08:14. |
![]() |
![]() |
![]() |
#2 | ||
Member
Iscritto dal: Apr 2008
Messaggi: 60
|
Quote:
come logica, lo switch è uguale all'IF nidificato in quanto una volta entrato in un case, poi c'è il BREAK che esclude gli altri test! l'IF nidificato, è migliore dei test in sequenza (se una condizione esclude l'altra): esempio se a=1 il codice Codice:
if (a==1) ..... //esegue il test, ma anche il blocco if if (a==2)...... //esegue solo il test ma è inutile. fa una istruzione in più Quote:
se (IF) c1=TRUE allora esegui il codice seguente altrimenti (ELSE), (quindi C1 è FALSE) esegui quest'altro (test su c2) siccome c1 è true, non eseguirà mai il test su c2. in questo caso se il tuo programma deve eseguire il test anche su c2, non puoi nidificarli. devi scrivere: Codice:
if(c1) { // il blocco viene eseguito } if(c2) { // il blocco in questo caso lo esegue perché anche 'c2' è 'true' // il ramo 'altrimenti', del primo test non esiste. // il discorso fatto in precedenza } |
||
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Nel 99.9999% dei casi sono identici come prestazioni. Se il numero di "case" supera un certo limite (sopra i 10. non ricordo di preciso), ed i valori sono tutti contigui come in una enum, allora viene usata una branch table. In questo caso lo switch diventa più veloce della serie di if/else.
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:51.