2009-03-25 10 views
25

Czy ktoś może mi to wyjaśnić?Jaka jest różnica między IF-ELSE i SWITCH?

+0

Po prostu wskaźnik - nie otrzymasz wielu pomocnych odpowiedzi, jeśli nie poświęcisz czasu na poprawne sformułowanie pytania. –

+0

Nieważne :) zostało zrobione. –

+0

Istnieje już pytanie na ten temat: [Przełącz kontra if-else] (http://stackoverflow.com/questions/97987/switch-vs-if-else) ** [EDYCJA] **
Jako "lc "W komentarzu do tej odpowiedzi, powyższe pytanie nie jest duplikatem, ale nadal może dać ci dobry pomysł na działanie i co używać, jeśli taka konkretna sytuacja ma miejsce. – RuudKok

Odpowiedz

33

Są bardzo podobne, ale każdy ma kilka specjalnych funkcji.

przełącznik

  • switch jest zazwyczaj bardziej zwarty niż wiele zagnieżdżonych if else a zatem bardziej czytelnej
  • Jeśli pominąć break między dwa przypadki przełącznika, można spaść do następnej sprawy wiele języków w języku C. Z if else potrzebujesz goto (co nie jest zbyt miłe dla twoich czytelników ... jeśli język w ogóle obsługuje goto).
  • W większości języków switch przyjmuje tylko typy pierwotne jako klucz i stałe jako przypadki. Oznacza to, że może być zoptymalizowany przez kompilator za pomocą bardzo szybkiego stołu skoku.
  • Nie jest jasne, jak prawidłowo sformatować switch. Semantycznie, przypadki są celami skoku (jak etykiety dla goto), które powinny być wyrównane w lewo. Sytuacja pogarsza się, gdy masz nawiasy klamrowe:

    A może szelki powinny być dopasowane do własnych? Czy klamra zamykająca powinna znajdować się za break? Jak to by było nieczytelne? itp.

  • W wielu językach switch akceptuje tylko niektóre typy danych.

if-else

  • if pozwala złożonych wyrażeń w warunkach, gdy przełącznik chce stała
  • Nie można przypadkowo zapomnieć break między if s, ale można zapomnieć o else (szczególnie podczas cut'n'paste)
  • akceptuje wszystkie typy danych.
+1

Jedna uwaga, aby wspomnieć, że przypadek wynika z zachowania jest język spcific, c na szczęście pozwoli to zrobić, ale C# nakłada pewne ograniczenia na przechodzenie przez jedną sprawę do drugiej. –

+0

jedną z głównych różnic jest sposób, w jaki sprawdzają warunek - za pomocą 'if-else' możesz sprawdzić tylko równość, podczas gdy z' switch' możesz zrobić trochę więcej .. –

-1

myślę, że główną różnicą jest to, że w if-else bloków możemy przetestować conditions.but nie idzie dokładnie w taki sam sposób, w przełączniku

0

IF indziej - służy za poświęcenie decyzje

Instrukcja switch - służy do testowania wartości danej zmiennej względem listy wartości case.

1

Główną różnicą jest to, że switch depesz natychmiast do case zainteresowanej, zwykle poprzez indeksowanego skoku, zamiast oceniać wszystkie warunki, które byłyby wymagane w łańcuchu if-else, co oznacza, że ​​kod na końcu łańcuch jest osiągany wolniej niż kod na początku.

To z kolei nakłada pewne ograniczenia na rachunku switch że łańcuch if-else nie ma: nie może obsługiwać wszystkie typy danych, a wszystkie wartości case musi być stała.

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. 

Zalety przełączyć if-else drabiny:

  • Oświadczenie przełącznik działa znacznie szybciej niż odpowiednik if-else drabiny. Dzieje się tak, ponieważ kompilator generuje tabelę przeskoku dla przełącznika podczas kompilacji. W konsekwencji, podczas wykonywania, zamiast sprawdzania, która sprawa jest spełniona, decyduje ona tylko, która sprawa ma być wykonana.
  • Jest bardziej czytelny w porównaniu do instrukcji if-else.
2

Różnice między if-else i przełączyć

  1. Expression wewnątrz if zdecydować, czy wykonać instrukcje wewnątrz bloku if lub w innym bloku. Z drugiej strony wyrażenie wewnątrz instrukcji switch decyduje o tym, która sprawa ma zostać wykonana.

  2. Instrukcja if-esle sprawdza równość i wyrażenie logiczne. Z drugiej strony przełączniki sprawdzają tylko dla równości.

  3. Instrukcja if oblicza liczbę całkowitą, znak, wskaźnik lub typ zmiennoprzecinkowy lub typ boolowski. Z drugiej strony, instrukcja switch oblicza tylko znak lub typ danych integer.

  4. Sekwencja wykonania jest jak instrukcja pod, jeśli blok zostanie wykonany, czy też instrukcje pod innym będzie wykonane. Z drugiej strony wyrażenie w instrukcji switch decyduje o tym, która sprawa ma zostać wykonana, a jeśli nie zastosujesz instrukcji break po każdym przypadku, będzie ona wykonywana do końca instrukcji switch.

  5. Jeśli wyrażenie wewnątrz, jeśli zwroty są fałszywe, zostanie wykonane polecenie wewnątrz bloku innego. Jeśli wyrażenie wewnątrz instrukcji switch okaże się fałszywe, wówczas wykonywane są instrukcje domyślne.

  6. Trudno jest edytować instrukcje if-else, ponieważ nużące jest śledzenie, gdzie wymagana jest poprawka. Z drugiej strony można łatwo edytować instrukcje przełączników, ponieważ są one łatwe do śledzenia.

Powiązane problemy