wake-up-neo.com

Was ist der Unterschied zwischen IF-ELSE und SWITCH?

Kann mir das bitte jemand erklären?

27
ahmed

Sie sind sich ziemlich ähnlich, aber jedes hat einige Besonderheiten.

Schalter

  • switch ist normalerweise kompakter als viele verschachtelte if else-Werte und daher lesbarer
  • Wenn Sie das break zwischen zwei Switch-Fällen weglassen, können Sie in vielen C-ähnlichen Sprachen zum nächsten Fall wechseln. Mit if else benötigen Sie goto (was für Ihre Leser nicht sehr nett ist ... wenn die Sprache goto überhaupt unterstützt).
  • In den meisten Sprachen akzeptiert switch nur primitive Typen als Schlüssel und Konstanten als Fälle. Das heißt, es kann vom Compiler anhand einer sehr schnellen Sprungtabelle optimiert werden.
  • Es ist nicht wirklich klar, wie switch richtig formatiert wird. Semantisch sind die Fälle Sprungziele (wie Labels für goto), die linksbündig sein sollten. Die Dinge werden schlimmer, wenn Sie geschweifte Klammern haben:

    case XXX: {
    } break;
    

    Oder sollten die Zahnspangen in eigene Reihen gehen? Sollte die schließende Klammer hinter der break gehen? Wie unlesbar wäre das? usw.

  • In vielen Sprachen akzeptiert switch nur einige Datentypen.

ansonsten

  • if erlaubt komplexe Ausdrücke in der Bedingung, während der Schalter eine Konstante wünscht
  • Sie können nicht versehentlich die break zwischen ifs vergessen, aber Sie können die else (besonders während des Cut'n'paste) vergessen.
  • es akzeptiert alle Datentypen.
34
Aaron Digulla

Der Hauptunterschied besteht darin, dass switch sofort in der Regel über einen indizierten Sprung an die betroffene case versendet, anstatt alle Bedingungen auswerten zu müssen, die in einer if-else-Kette erforderlich wären, d wird langsamer als der Code am Anfang erreicht.

Dies führt wiederum zu einigen Einschränkungen für die switch-Anweisung, die die if-else-Kette nicht hat: Sie kann nicht alle Datentypen verarbeiten und alle case-Werte müssen konstant sein.

2
user207421

Unterschiede zwischen if-else und switch

  1. Der Ausdruck innerhalb einer if -Anweisung entscheidet, ob die Anweisungen im Block oder unter else-Block ausgeführt werden sollen. Auf der anderen Seite entscheiden expression innerhalb der switch-Anweisung, welcher Fall ausgeführt werden soll.

  2. If-esle-Anweisung prüft auf Gleichheit sowie auf logischen Ausdruck. Auf der anderen Seite prüft der Schalter nur die Gleichheit.

  3. Die if -Anweisung wertet einen Ganzzahl-, Zeichen-, Zeiger- oder Gleitkommatyp oder einen booleschen Typ aus. Die switch-Anweisung hingegen wertet nur den Datentyp "character" oder "integer" aus.

  4. Die Ausführungsreihenfolge ist wie bei beiden Anweisungen, ob ein Block ausgeführt wird, oder Anweisungen, die ansonsten ausgeführt werden. Andererseits entscheidet der Ausdruck in der switch-Anweisung, welcher Fall ausgeführt werden soll. Wenn Sie nach jedem Fall keine break-Anweisung anwenden, wird sie bis zum Ende der switch-Anweisung ausgeführt.

  5. Wenn der Ausdruck inside if falsch ist, wird eine Anweisung in else block ausgeführt. Wenn der Ausdruck in der switch-Anweisung falsch ist, werden die Standardanweisungen ausgeführt.

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

in einem Wort können wir sagen switch wirkt etwas schneller als if-else-Anweisung !!!

2
MD RAHIM

WENN sonst - IT wird zur Entscheidungsfindung eingesetzt

Switch-Anweisung - Mit dieser Option wird der Wert der angegebenen Variablen anhand einer Liste von Case-Werten geprüft.

1
Kv mathew

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

Dies ist die allgemeine Syntax von if-else ladder:

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 das 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;
}

Die if-else-Ladder hat den Typ strikte Bedingungsüberprüfung, Während der Schalter vom Typ Sprungwertfang ist.

Vorteile der Umschaltung der if-else-Ladder:

  • Eine switch-Anweisung funktioniert viel schneller als die entsprechende if-else-Ladder. Dies liegt daran, dass der Compiler beim Übersetzen eine Sprungtabelle für einen Switch generiert. Anstatt zu prüfen, welcher Fall erfüllt ist, entscheidet er während der Ausführung nur, welcher Fall ausgeführt werden muss.
  • Es ist lesbarer und vergleichbar mit if-else-Anweisungen.
0
Rizwan Shaikh