2009-03-25 19 views
25

Qualcuno può spiegarmelo per favore?Qual è la differenza tra IF-ELSE e SWITCH?

+0

Solo un puntatore: non avrai molte risposte utili se non prendi il tempo per formulare correttamente la domanda. –

+0

Non importa :) è stato fatto. –

+0

C'è già una domanda su SO: [Switch vs if-else] (http://stackoverflow.com/questions/97987/switch-vs-if-else) ** [EDIT] **
Come "lc "indicato in un commento a questa risposta, la domanda di cui sopra non è un duplicato, ma potrebbe ancora darti una buona idea del funzionamento e di cosa usare se si verifica una situazione specifica. – RuudKok

risposta

33

Sono piuttosto simili ma ognuno ha alcune caratteristiche speciali.

interruttore

  • switch di solito è più compatto di molti nidificato if else e, quindi, più leggibile
  • Se si omette il break tra due corpi interruttore, si può cadere fino al prossimo caso in molte lingue simili a C. Con if else avresti bisogno di un goto (che non è molto bello per i tuoi lettori ... se la lingua supporta lo goto).
  • Nella maggior parte delle lingue, switch accetta solo tipi primitivi come chiavi e costanti come casi. Ciò significa che può essere ottimizzato dal compilatore usando una tabella di salto che è molto veloce.
  • Non è chiaro come formattare correttamente lo switch. Semanticamente, i casi sono obiettivi di salto (come etichette per goto) che dovrebbero essere allineati a sinistra. Le cose peggiorano quando si hanno parentesi graffe:

    case XXX: { 
    } break; 
    

    Oppure le parentesi devono essere allineate? Il rinforzo di chiusura dovrebbe andare dietro allo break? Quanto sarebbe illeggibile? ecc.

  • In molte lingue, switch accetta solo alcuni tipi di dati.

if-else

  • if permette espressioni complesse nella condizione mentre l'interruttore vuole una costante
  • Non si può dimenticare accidentalmente le break tra if s ma si può dimenticare il else (specialmente durante cut'n'paste)
  • accetta tutti i tipi di dati.
+1

Una nota per ricordare che il caso ricade nel comportamento è linguaggio spcific, c ti consentirà felicemente di farlo, ma C# pone alcune restrizioni su come passare da un'istruzione di un caso a un altro. –

+0

una delle maggiori differenze è il modo in cui controllano la condizione - con 'if-else' puoi solo controllare l'uguaglianza, mentre con' switch' puoi fare un po 'di più .. –

-1

Credo che la differenza principale è che in blocchi if-else possiamo testare conditions.but non va esattamente nello stesso modo nella interruttore

0

IF altro - E 'usato per prendere una decisione

Istruzione switch: viene utilizzata per verificare il valore della variabile data rispetto a un elenco di valori case.

1

La differenza principale è che switch dispacci immediatamente al case questione, tipicamente attraverso un salto indicizzato, invece di dover valutare tutte le condizioni che sarebbero necessarie in una catena if-else, il che significa che il codice di fine la catena viene raggiunta più lentamente del codice all'inizio.

Che a sua volta impone alcune restrizioni alla dichiarazione switch che la catena if-else non ha: non in grado di gestire tutti i tipi di dati, e tutti i valori case deve essere costante.

0
The difference between Switch and if-else statement is below: 

This is the general syntax of if-else ladder: 
if (condition1) { //Body of if } 
else if (condition2) { //Body of if } 
else if (condition3) { //Body of if } 


And this is the general syntax for switch: 
switch (variable) 
{ 
case <variable value1>: //Do Something 
              break; 
case <variable value2>://Do Something 
              break; 
default: //Do Something 
       break; 
} 

# The if-else ladder is of type strict condition check, 
# while switch is of type jump value catching. 

I vantaggi di passare if-else scaletta:

  • Un'istruzione switch funziona molto più veloce di scala equivalente if-else. È perché il compilatore genera una tabella di salto per uno switch durante la compilazione. Di conseguenza, durante l'esecuzione, invece di verificare quale caso è soddisfatto, decide solo quale caso deve essere eseguito.
  • È più leggibile e in confronto alle istruzioni if-else.
2

Differenze tra if-else e switch

  1. Espressione all'interno if decidere se l'esecuzione delle istruzioni all'interno se blocco o in blocco else. D'altra parte, l'espressione all'interno dell'istruzione switch decide quale caso eseguire.

  2. Se l'istruzione delle esecuzioni controlla l'uguaglianza e l'espressione logica. D'altra parte, passare i controlli solo per l'uguaglianza.

  3. L'istruzione if valuta un numero intero, un carattere, un puntatore o un tipo in virgola mobile o un tipo booleano. D'altra parte, l'istruzione switch valuta solo il carattere o un tipo di dati intero.

  4. La sequenza di esecuzione è come una delle istruzioni sotto se il blocco verrà eseguito o le istruzioni in un'altra istruzione di blocco verranno eseguite. D'altra parte l'espressione in switch statement decide quale caso da eseguire e se non si applica un'istruzione break dopo ogni caso verrà eseguita fino alla fine dell'istruzione switch.

  5. Se espressione all'interno se i giri in uscita sono falsi, verrà eseguita l'istruzione all'interno del blocco else. Se l'espressione all'interno dell'istruzione switch risulta essere falsa, vengono eseguite le istruzioni predefinite.

  6. È difficile modificare le istruzioni if-else in quanto è noioso tracciare dove è richiesta la correzione. D'altra parte è facile modificare le istruzioni switch in quanto facili da tracciare.