Hey Leute, ich frage mich gerade, ob, und wenn, was für einen Unterschied es macht, ob man if Abfragen verschachtelt oder gleichzeitig macht. Beispiel:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
oder
1 | |
2 | |
3 | |
4 | |
Ist das eine besser als das andere? Grüße Joe
|
Anzeige
|
if Abfrage - Verschachteln oder gleichzeitig?Hey Leute, ich frage mich gerade, ob, und wenn, was für einen Unterschied es macht, ob man if Abfragen verschachtelt oder gleichzeitig macht. Beispiel:
oder
Ist das eine besser als das andere? Grüße Joe Es ist viel übersichtlicher wenn du direkt den gesamten Boolschen Ausdruck in eine Bedingung schreibst. Dann sieht man auf den ersten Blick was das IF tun soll. Aber es gibt natürlich Fälle in denen machen verschachtele IFs sinn, aber sicher nicht in deinem einfachen Beispiel. Nicht ganz deine Frage, aber ähnlich: Ein berühmtes C-Mantra sagt "Code links halten. Wächter- statt Schachtel-IF". gruß cyblord Hängt von deiner Situation ab. Beispiel: Du hast einen Alarmsensor und musst auch überprüfen ob der 'Scharf'-Schalter aktiv ist. Wurde kein Alarm ausgelöst, ist die Stellung des Schalters eigentlich egal. Da wäre einen Verschachtelung besser:
Zweites Beispiel: Du musst zwei Alarmsensoren prüfen und beide müssen melden, damit der ALarm ausgegeben wir:
Thomas K. schrieb: > Hängt von deiner Situation ab. Beispiel: Du hast einen Alarmsensor und > musst auch überprüfen ob der 'Scharf'-Schalter aktiv ist. Wurde kein > Alarm ausgelöst, ist die Stellung des Schalters eigentlich egal. Da wäre > einen Verschachtelung besser: > >
Und warum ist das hier jetzt besser als
Deine beiden Beispiele sind im Bezug auf die Verschachtelung genau gleich zu bewerten. Die gleichzeitige Abfrage kostet mehr Rechenzeit. Evtl. auch dann, wenn ein Parameter (vorerst) nicht zwingend überprüft werden muss oder nur dann relevant ist, wenn der andere Parameter einen positiven Test ergibt. Wenn du nicht so auf die Anlaufgeschwindigkeit achten muss, kannst natürlich auch beides einsetzen. Das Ergebnis wäre das selbe. Thomas K. schrieb: > Hängt von deiner Situation ab. Beispiel: Du hast einen Alarmsensor und > musst auch überprüfen ob der 'Scharf'-Schalter aktiv ist. Wurde kein > Alarm ausgelöst, ist die Stellung des Schalters eigentlich egal. Da wäre > einen Verschachtelung besser: > >
Ist Ansichtssache. Wenn es dir extrem wichtig ist, im Code zum Ausdruck zu bringen "Erst mal brauchen wir einen Alarm", dann kann das eventuell besser sein. Genauso wenn du damit rechnest, dass neben 'Scharf' noch andere Kriterien dazukommen. Andere Kriterien können zb sein: Wenn der Alarm nicht scharf geschaltet ist, dann wird zwar keine Sirene ausgelöst, aber eine SMS könnte trotzdem verschickt werden.
Dein Programm muss dabei noch gar nicht auf SMS umgebaut sein, alleine schon wenn du damit rechnest, das eines Tages machen zu müssen, könnte deine Version so gesehen optisch besser sein. Codemässig bzw. Laufzeitmässig schenkt sich das erst mal sowieso nix. Thomas K. schrieb: > Die gleichzeitige Abfrage kostet mehr Rechenzeit. Nö. Im Gegensatz zum Ur-Pascal ist in C die Short-Circuit Evaluation garantiert. Ist der erste Term in einem && Ausdruck bereits FALSE, wird der zweite nicht mehr bewertet. Darum darf man in C Pointerzugriffe auch so absichern
und hat die Garantie(!), dass ein NULL Pointer hier nicht dereferenziert wird. (Was im Ur-Pascal immer ein Problem war, weil es vom Compiler abhing, ob der Short Circuit Evaluation machte oder nicht) (Und genau das ist auch der Grund, warum in C sowohl && als auch || Sequence Points sind. Die Abarbeitungsreihenfolge AA && BB wird dadurch zu: erst AA, dann (eventuell) BB festgenagelt. Etwas was ja zb bei AA == BB nicht garantiert ist.) Joe B. schrieb: > Ist das eine besser als das andere? Von der Logik und vom Ergebnis her sind beide Versionen absolut identisch. Der Compiler wird auch für beide Varianten denselben Code erzeugen. Allerdings: Wenn Du (später in der Programmentwicklung) noch ein else-Statement für die erste Bedingung brauchst, dann bist Du mit Variante 2 gekniffen. Ich mache das selber immer von der Frage abhängig: "Brauche ich hier später vielleicht noch ein 'else'?" Wenn ich dies verneinen kann, nehme ich meist die Kombi-Lösung mit "&&", weils meist übersichtlicher ist.
Gast
#2840429
Hallo :-) Bei dem Topic war ich skeptisch und auf einen langweiligen Thread gefasst. Vielen Dank daher für diese beiden Beiträge, die ich mir merken werde: cyblord ---- schrieb: > Ein berühmtes C-Mantra sagt "Code links halten. Wächter- statt > Schachtel-IF". Frank M. schrieb: > "Brauche ich hier später vielleicht noch ein 'else'?" Grüße, Dirk
Beitrag #5786324 wurde von einem Moderator gelöscht.
Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|