Das kommt immer darauf an, was gewollt ist. Die beiden Lösungen unterscheiden sich fundamental in ihrer Aussage. Wenn die einfache Variante gemeint ist, dann ist das in Ordnung, aber die Aussage, dass die beiden Statements praktisch gleichwertig sind ist grob falsch. So gesehen war auch der Ursprungscode falsch.
Falls y keine Funktion ist, sondern eine Variable gilt:
Die beiden Lösungen unterscheiden sich in keiner Weise, das Ergebnis ist exakt identisch.
Man kann sie auch ineinander umformen.
Vorraussetzung: y und showzero bleiben bei mehrfacher Auswertung konstant.
Ich definiere:
a := showzero
b := not showzero
c := y > 0
xaromz Statement wird damit zu
Und das Distributivgesetz sagt:
Code:
a or (b and c) = (a or b) and (a or c)
Es gilt:
Code:
a or b = a or (not a) = true
Damit wird die Formel zu:
Code:
true and (a or c) = a or c
q.e.d.
Mit teilweiser Boolescher Auswertung (standardmäßig aktiviert) entspricht der Code komplett den Ursprungscode, bei deaktivierter teilweiser Auswertung wird in jedem Fall (y>0) geprüft, falls y also eine Funktion ist wird diese immer ausgeführt und nicht nur falls showzero falsch ist.
Oha, roter Kasten. Aber das mit der teilweisen Auswertung hat noch keiner gesagt