Select Case oder If?!

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Gonger96.

    Select Case oder If?!

    Hallo liebes Forum,
    ich bin dabei wieder mal ein (diesesmal) strukturiertes und systematisches Spiel zu programmieren, spricht GDI ...
    Nun hab ich ein Sub(), benannt Gravitation-Boolean ...

    Dieses funktioniert super, nur habe ich nun eine Frage zum Stil:

    Was ist vom Coden UND von der Performance her besser,

    Select Case, oder If-Else?

    Meiner Meinung ist Select Case strukturierter, nur will ich nun mich um den richtigen Stil erkundigen...

    Im Sub() wird ein boolearischer Wert abgefragt...

    Mfg.eniking1998
    If ist immer schneller, da das quasi 1zu1 in einen Assemblerbefehl übersetzt werden kann. Bei Select Case (oder eigentlich switch) müssen die im Framework definierten Vergleichsoperationen ausgeführt werden, da die Hardware nur Boolean(bzw. Bit-)vergleich unterstützt. Dazu kommen dann noch ein paar Stackoperationen mehr. Dieser Vorteil geht allerdings verloren, sobald du ElseIf-Zweige reinbringst.
    Aber mal ernsthaft, wenn du anfängst solche Erbsen zu zählen, dann hast du keinen Spaß mehr am Programmieren. Der Geschwindigkeitsunterschied liegt hier im Bereich von Nanosekunden.
    Switch ist soviel ich weiß, ein Verschachteltes if, elif, else...
    Also:

    VB.NET-Quellcode

    1. Select Case blub
    2. Case "bar"
    3. MsgBox("Warum nicht foo?")
    4. Case "foo"
    5. MsgBox("foo ist zu alt, bitte Benutzen sie bar!")
    6. Case "blub"
    7. MsgBox("Warum ist blub=blub?")
    8. Case Else
    9. MsgBox("Leider weiß ich nich was ich mit '"+blub+"' anfangen Soll!")
    10. End Select

    kann man durch:

    VB.NET-Quellcode

    1. If blub="bar" Then
    2. 'blablabla
    3. Elif blub="foo" Then
    4. ' blablabla
    5. Else
    6. ' Ist doch egal...
    7. End If

    ersetzen. (Natürlich entsprechend angepasst)
    In der Praxis müsste aber If blablabla then Blablabla schneller sein.
    @Artentus das ist leider Falsch!

    C-Quellcode

    1. if(foo=1) {
    2. // BLABLA
    3. } else {
    4. // BLABLA
    5. }

    wird zu:

    Quellcode

    1. mov eax,[ebp+foo] ' eax ist nun der inhalt von FOO
    2. cmp eax,1
    3. je .ok
    4. 'BLABLA FALSE
    5. .ok:
    6. 'BLABLA TRUE

    Achja:
    Case => if(...); else if(...); else; endif;