Ist der Befehl "else if" unnötig?

9 Antworten

Kannst du, ist aber langsamer und die Semantik ist nicht mehr die gleiche.

Wenn bei else if ein vorhergehendes if zutrifft, werden die anderen übersprungen wodurch du die nachfolgenden Vergleiche sparst. Bei zehn else if entsprechend 10 Vergleiche wenn das erste if zutrifft -> 10x schneller.

Weiterhin bzgl. Semantik. Wenn du z.B. mehrere if's in else if's überführst, musst du darauf achten, dass die Statusveränderungen die gleichen sind. Also lapidar gesagt, dass dein Code am Ende das gleiche macht z.B. Variablen in gleicher Reihenfolge verändert, wenn das für den Algorithmus eine Bedeutung hat.

Nein, das wäre etwas Anderes. Beispiel:

a = 5
if (a = 5) {
  print "A"
} else if (a < 10) {
  print "B"
}

Die Ausgabe ist in diesem Fall:

A

Nun ohne else if und nur mit if, wie du vorschlägst:

a = 5
if (a = 5) {
  print "A"
}
if (a < 10) {
  print "B"
}

Ausgabe:

A
B

Ein else if könnte man auch umschreiben zu:

a = 5
if (a = 5) {
   print "A"
} else {
   if (a < 10) {
     print "B"
   }
}
FAZIT: Ein else if ist erforderlich, wenn der Block nur ausgeführt werden soll, wenn die vorangehende if- oder else if-Bedingung nicht erfüllt ist.
pascalmeister 
Fragesteller
 28.12.2017, 17:17

Ok danke :) Wie hast du denn disen Code mit den passenden farben hier rein bekommen?

0
tavkomann  28.12.2017, 17:23
@pascalmeister

Gerne. Du musst einfach auf das Symbol "</>" klicken. Dazu musst du oben rechts im Editor bei den drei Punkten ggf. die Optionen aufklappen, wenn du das nicht schon gemacht hast. Dort findest du auch weitere Funktionen wie Zitieren. Das Syntax-Highlighting geschieht hier auf gutefrage automatisch.

0

"unnötig" ? "manchmal Ja" : "manchmal Nicht";

In China sagt man aber "Wahr", "Nicht Wahr" und "Alles Andere".

Also hat man hier auch Exception erfunden.

-------------

Das ist aber nicht ganz korrekt.

Warum?

Es gibt auch "verschwommene Logik" - Fuzzi-Logig

https://de.wikipedia.org/wiki/Fuzzylogik

Also in dieser Logik, kann ich Deine "if-else" Fragen leider nicht ganz genau beantworten.

Mit "if-else" kann man auch die Dilemma um die arme Schrödinger Katze auch nicht beantworten:

https://de.wikipedia.org/wiki/Schr%C3%B6dingers_Katze

Also baue bitte neue Syntax, zB (if "verschwommene Frage halb-else verschwommene Antwort" teilweise-elseif "Rest" ;

Ich helfe immer nur teilweise.

und jetzt habe ich Dir sicher vollständig geholfen. Ne Wa?

Nein, das siehst Du schon generell richtig, allerdings müßtest Du die Vorbedingunng in allen weiteren If-Abfragen ggf. mitschleppen, bzw. die Bedingungen umformulieren.

Dies ist eigentlich immer möglich, verkompliziert aber entsprechende Ausdrücke und erhöht dadurch oft auch die fehleranfälligkeit. Insofern ist else if ein Stilmittel, welches Formulierungen vereinfacht, ähnlich wie zum Beispiel auch switch/case.

Genauso braucht es maximal einen Schleifenkonstrukt, oder alternativ Sprungbefehle, die Schleifentypen sind jederzeit ineinander überführbar. Allerdings machen verschiedene Schleifenformen es einfacher bestimmte Dinge auszudrücken, was dann umgekehrt auch den Code lesbarer/verständlicher macht.

Ja, du siehst was falsch.

"else if" bedeutet:

Wenn das Vorangegangenen nicht zutrifft und das Folgende zutrifft, dann...

während "if" bedeutet:

Wenn das Folgende zutrifft, dann...

Es gibt Konstrukte, da ist das egal (etwa: if a = 1 ... else if a = 2 ...), daraus zu schließen, das wäre immer so, ist falsch.

Ich denke aber, dass diese Vermutung eher aufkommt, wenn man ein Programm liest, als wenn man es schreibt.