34 Stimmen

Was ist der Unterschied zwischen IF-ELSE und SWITCH?

Kann mir das bitte jemand erklären?

0 Stimmen

Nur ein Hinweis: Sie werden nicht viele hilfreiche Antworten erhalten, wenn Sie sich nicht die Zeit nehmen, die Frage richtig zu formulieren.

0 Stimmen

Macht nichts :) es ist schon geschehen.

0 Stimmen

Es gibt bereits eine Frage zu diesem Thema auf SO: Schalter vs. if-else ** Editar **<BR> Wie "lc" in einem Kommentar zu dieser Antwort feststellte, ist die obige Frage kein Duplikat, aber sie könnte Ihnen dennoch eine gute Vorstellung von der Funktionsweise geben und was zu verwenden ist, wenn diese spezielle Situation auftritt.

38voto

Aaron Digulla Punkte 308693

Sie sind sich ziemlich ähnlich, weisen aber jeweils einige Besonderheiten auf.

Schalter

  • switch ist in der Regel kompakter als eine Vielzahl von verschachtelten if else und daher besser lesbar

  • Wenn Sie die break In vielen C-ähnlichen Sprachen kann man zwischen zwei Schaltfällen zum nächsten Fall übergehen. Mit if else bräuchten Sie eine goto (was nicht sehr nett für Ihre Leser ist ... wenn die Sprache die goto überhaupt nicht).

  • In den meisten Sprachen, switch akzeptiert nur primitive Typen als Schlüssel und Konstanten als Fälle. Das bedeutet, dass sie vom Compiler mit Hilfe einer Sprungtabelle optimiert werden kann, was sehr schnell ist.

  • Es ist nicht ganz klar, wie man die switch korrekt. Semantisch gesehen, sind die Fälle Sprungziele (wie Etiketten für goto ), die linksbündig sein sollte. Schlimmer wird es, wenn Sie geschweifte Klammern haben:

    case XXX: {
    } break;

    Oder sollen die Klammern in eigene Zeilen übergehen? Soll die schließende Klammer hinter die break ? Wie unleserlich wäre das? usw.

  • In vielen Sprachen, switch akzeptiert nur einige Datentypen.

if-else

  • if erlaubt komplexe Ausdrücke in der Bedingung, während switch eine Konstante will
  • Sie können nicht versehentlich vergessen, die break zwischen if s, aber Sie können die else (insbesondere beim Ausschneiden und Einfügen)
  • es akzeptiert alle Datentypen.

1 Stimmen

Eine Anmerkung zu erwähnen, dass der Fall Fall durch Verhalten sprachspezifisch ist, C wird glücklich erlauben Sie dies tun, aber c# legt einige Einschränkungen auf fallen durch eine Fall-Anweisung zu einem anderen.

0 Stimmen

Einer der wichtigsten Unterschiede ist die Art und Weise, wie sie den Zustand prüfen - mit if-else können Sie nur auf Gleichheit prüfen, während Sie mit switch können Sie ein bisschen mehr tun.

9voto

user207421 Punkte 297318

Der Hauptunterschied besteht darin, dass switch sendet sofort zum case in der Regel über einen indizierten Sprung, anstatt alle Bedingungen auszuwerten, die in einem anderen Programm erforderlich wären. if-else Kette, was bedeutet, dass der Code am Ende der Kette langsamer erreicht wird als der Code am Anfang der Kette.

Daraus ergeben sich wiederum einige Einschränkungen für die switch Aussage, dass die if-else Kette nicht hat: Sie kann nicht alle Datentypen verarbeiten, und alle case Werte müssen konstant sein.

5voto

Kv mathew Punkte 59

IF else - IT wird verwendet, um eine Entscheidung zu treffen

Switch-Anweisung - Sie wird verwendet, um den Wert der angegebenen Variablen mit einer Liste von Fallwerten zu vergleichen.

0 Stimmen

Beide werden zum Testen von Werten verwendet, und beide werden zum Treffen von Entscheidungen verwendet. Man kann keine Entscheidung treffen, ohne einen Wert zu testen, und das Testen eines Wertes ist sinnlos, wenn man keine Entscheidung treffen will.

3voto

MD RAHIIM Punkte 99

Unterschiede zwischen if-else und switch

  1. Die Ausdrücke in der if-Anweisung entscheiden, ob die Anweisungen im if-Block oder im else-Block ausgeführt werden sollen. Andererseits entscheiden die Ausdrücke in der switch-Anweisung, welcher Fall ausgeführt werden soll.

  2. Die If-esle-Anweisung prüft sowohl auf Gleichheit als auch auf logische Ausdrücke. Die switch-Anweisung hingegen prüft nur auf Gleichheit.

  3. Die if-Anweisung wertet Ganzzahlen, Zeichen, Zeiger, Fließkommazahlen oder Boolesche Werte aus. Die switch-Anweisung hingegen wertet nur Zeichen oder einen Integer-Datentyp aus.

  4. Die Reihenfolge der Ausführung ist so, dass entweder die Anweisung im if-Block ausgeführt wird oder die Anweisungen im else-Block ausgeführt werden. Andererseits entscheidet der Ausdruck in der switch-Anweisung, welcher Fall ausgeführt werden soll, und wenn Sie nach jedem Fall keine break-Anweisung anwenden, wird er bis zum Ende der switch-Anweisung ausgeführt.

  5. Wenn der Ausdruck in if falsch ist, wird die Anweisung im else-Block ausgeführt. Wenn sich der Ausdruck in der switch-Anweisung als falsch herausstellt, wird die Standardanweisung ausgeführt.

  6. Es ist schwierig, if-else-Anweisungen zu bearbeiten, da es mühsam ist, herauszufinden, wo die Korrektur erforderlich ist. Andererseits ist es einfach, switch-Anweisungen zu bearbeiten, da sie leicht zu verfolgen sind.

mit einem Wort können wir sagen switch wirkt ein wenig schneller als if else-Anweisung!!!

0 Stimmen

"Wenn der Ausdruck in der switch-Anweisung falsch ist, wird die Standardanweisung ausgeführt": Das ist nicht der Fall. Betrachten Sie boolean b = false; switch (b) { case true: break; case false: break; } . Nein default dort.

0 Stimmen

Und (1) ist eine Unterscheidung ohne Unterschied. if entscheidet, ob die if-Anweisung oder die else-Anweisung ausgeführt werden soll. switch entscheidet, welcher Fall ausgeführt werden soll. Hier gibt es keinen wesentlichen Unterschied.

1voto

Rizwan Shaikh Punkte 253

Der Unterschied zwischen der Switch- und der if-else-Anweisung ist der folgende:

Dies ist die allgemeine Syntax der if-else-Leiter:

if (condition1) { //Body of if }
    else if (condition2) { //Body of if }
    else if (condition3) { //Body of if }
else { //default if all conditions return false }

Und dies ist die allgemeine Syntax für switch:

switch ( variable )
{
 case <variable value1>: //Do Something
                                             break;
 case <variable value2>://Do Something
                                             break;
 default: //Do Something
                break;
}

Der if-else-Leiter ist vom Typ strenge Bedingungsprüfung, während switch vom Typ jump value catching ist.

Vorteile von switch gegenüber if-else ladder:

  • Eine switch-Anweisung arbeitet viel schneller als eine entsprechende if-else-Leiter. Das liegt daran, dass der Compiler während der Kompilierung eine Sprungtabelle für eine switch-Anweisung erzeugt. Folglich wird während der Ausführung nicht mehr geprüft, welcher Fall erfüllt ist, sondern nur noch entschieden, welcher Fall ausgeführt werden muss.
  • Sie ist besser lesbar und mit if-else-Anweisungen vergleichbar.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X