Christoph Zurnieden: IF-Anweisungen oder Switch-Case?

Beitrag lesen

Hi,

nachdem die werten Kollegen nun erfolgreich festgestellt haben, das es wohl wahrscheinlich am Algorithmus selber lag (es liegt in 99% der Fälle daran. Der Rest lohnt sich auch nur, wenn sich damit die Verkaufszahlen erhöhen lassen und/oder der Code besonders elegant ist.) möchte ich doch einmal kurz auf den Unterschied zwischen switch() und if/else Konstrukten eingehen.

Wenn der Compiler/Interpreter gut ist, tut sich bei beiden nicht viel auf höchster Optimierungsstufe. Allerdings ist mir kein Compiler/Interpreter bekannt, der tatsächlich von sich aus die beste Methode wählt. (Beim neuem Perl habe ich aber noch nicht in den Code geschaut ;-)

Der Unterschied liegt bei den meisten mir bekannten Interpretern/Compilern darin, das ein switch() als vollständiger binärer Baum oder als Heap aufgebaut wird und ein if/else Konstrukt dagegen der Reihe nach abgeklappert wird.

Technisch gibt es eine Beschränkung aber nur dahingehend, das die Vergleichswerte im Vornherein bekannt sein müssen, das ist beim if/else Konstrukt nicht der Fall. So etwas wie if(function_1() == function_2()) geht im switch() nicht. Sonst ist alles im switch erlaubt, aber aus Simplizitätsgründen sind meist nur Integerwerte drin.

Gibt es eine bestimmte Anzahl von Fällen, ab die sich Switch Case lohnt oder ist das egal und liegt nur im Auge des Programmierers?

Ja, derartige Grenzen bestehen durchaus, aber das erfordert genaue Kenntnis darüber, wie switch() implementiert ist, welche Daten zu erwarten sind und vor allem: ob's jemand bezahlt, das man sich da überall durchwühlt >;->

Aber Scherz beiseite: Schau in der Dokumentation Deiner Sprache nach was in switch() alles erlaubt ist. Das ist dann meist schneller, als if/else. Oder wie aus der Erklärung oben herausziehbar: wenn Du auf eine Reihe (mehr als 3 sollten es schon sein) feststehender Integerwerte testen mußt: nimm einen switch().

so short

Christoph Zurnieden