if und else if

  • GM 8
  • if und else if

    Hi,
    ich hab mal eine Performance frage zu den if und else if Abfragen.
    Nehmen wir mal an ich hab sehr viele Abfragen hintereinander und will Variablen überprüfen, dann gibt es ja 2 Möglichkeiten es zu lösen.

    Methode 1

    GML-Quellcode

    1. if(code==1)
    2. {
    3. //do this
    4. }
    5. if(code==2)
    6. {
    7. //do this
    8. }
    9. ...
    10. usw.


    Methode 2

    GML-Quellcode

    1. if(code==1)
    2. {
    3. //do this
    4. }
    5. else if(code==2)
    6. {
    7. //do this
    8. }
    9. ...
    10. usw.


    Hier wird überprüft welcher wert "code" hat und dann eine aktion ausgeführt.
    Der Unterschied zu Methode 1 und 2 ist dass er bei Methode 2 nur das erste if überprüft und die 2. abfrage nur aktiviert wird wenn die erste nicht eintrifft, richtig?

    Nun zu meiner eigentlichen Frage: Verbraucht die 2. Methode weniger Performance? Überprüft er bei Methode 2 nur die erste Abfrage und ignoriert die anderen Abfragen wenn die erste Abfrage zutrifft?
    Oder spielt das keine Rolle und beide Methoden verbrauchen gleich viel Performance/Rechenleistung?


    MFG
    Imagine taking your usual two century long nap minding your own business when suddenly some cunt wakes you up.
    You tell him to f*ck off of course but just when you finally managed to fall asleep again the same asshole comes knocking again. I'd attack that dick too.
  • Ja, die zweite Variante benötigt weniger performance.
    Je nach dem wie oft das vorkommt unterschiedlich viel aber das zweite wird eben garnicht nicht erst überprüft.

    Du kannst das aber auch ganz leicht testen:

    GML-Quellcode

    1. if(code==1)
    2. {
    3. //do this
    4. }
    5. else if(code == show_message("blabla"))
    6. {
    7. //do this
    8. }

    Die Message erscheint nur wenn code eben nicht = 1 ist.
    show_message gibt übrigens immer 0 zurück.


    Anders sieht das aus wenn man 'and' bzw '&&' benutzt!

    GML-Quellcode

    1. if (code == 1) and (variable == show_message("blabla"))
    2. {
    3. // Code
    4. }


    Hierbei wird die Message immer erscheinen, selbst dann wenn code = 0 ist.
    Dies ist in anderen Programmiersprachen anders!
    Edit: Im GM kann man darum die Performance etwas steigern wenn man if-Abfragen aneinanderreiht. Weniger schön aber efektiver xP


    Übrigens ist es in deinem Beispiel noch efektiver ein switch-statement zu benutzen...


    ... und ich hoffe dass dies nicht für den Performance-Test contest gedacht ist :D

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • DragonXZ schrieb:

    Nehmen wir mal an ich hab sehr viele Abfragen hintereinander und will Variablen überprüfen, dann gibt es ja 2 Möglichkeiten es zu lösen.
    Besser noch bei vielen Abfragen wäre ein Switch.

    Quellcode

    1. switch(code)
    2. {
    3. case 1: //code
    4. break;
    5. case 2: //code
    6. break;
    7. .
    8. .
    9. .
    10. }
    Alles anzeigen
  • Benutzer online 1

    1 Besucher