switch

Statt

    if(a==1)
    {
        //irgendwas
    }
    else if(a==2)
    {
        //irgendwas
    }
    else if(a==3)
    {
        //irgendwas
    }
    else if(a==4)
    {
        //irgendwas
    }
    else if(a==5)
    {
        //irgendwas
    }
    else if(a==6)
    {
        //irgendwas
    }
    else if(a==7)
    {
        //irgendwas
    }
    else if(a==8)
    {
        //irgendwas
    }
    else if(a==9)
    {
        //irgendwas
    }
    else if(a==10)
    {
        //irgendwas
    }

kann man vereinfach aucht

    switch(a)
    {
    case 1:
        //irgendwas
        break;
    case 2:
        //irgendwas
        break;
    case 3:
        //irgendwas
        break;
    case 4:
        //irgendwas
        break;
    case 5:
        //irgendwas
        break;
    case 6:
        //irgendwas
        break;
    case 7:
        //irgendwas
        break;
    case 8:
        //irgendwas
        break;
    case 9:
        //irgendwas
        break;
    case 10:
        //irgendwas
        break;
    }

schreiben. Wie man sieht wird der Code dadurch nicht unbedingt viel kürzer, dafür aber viel klarer.

Ein switch verwendet man dann wenn man eine Variable mit vielen Werten vergleichen will - der Vorteil ist: der Compiler macht nicht mehr 10 Vergleiche sondern erstellt eine Sprungtabelle. Das bedeutet, dass der Compiler nur eine kleine Rechnung macht und dann sofort weiß welchen Code er ausführen muss. Das kann signifikanten Geschwindigkeitsvorteil bringen.

Der Nebeneffekt ist, dass der Code viel klarer wird um einen Trick anwenden kann um Code Redundanz zu vermeiden/verringern:

    if(zahl<20)
    {
        cout<<zahl<<" ist kleiner 20";
        switch(zahl)
        {
        case 2:
        case 3:
        case 5:
        case 7:
        case 11:
        case 13:
        case 17:
        case 19:
            cout<<" und eine Primzahl";
            break;
        }
    }
    else
    {
        cout<<zahl<<" ist größer 20";
    }

Man kann durch ein case 'durchfallen' und somit können sich mehrere cases den selben Code teilen. Ein case verläßt man mit einem break;.

Ein else gibt es natürlich auch beim switch - hier nennt es sich allerdings default und wird genau wie ein case behandelt.

Die cases müssen nicht in einer bestimmten Reihenfolge stehen, case 3: kann durchaus auch vor case 1: kommen.

switch hat nur einen Nachteil: da eine Sprungtabelle berechnet wird, kann man nur int Typen sowie char bei einem switch verwenden.

top