Navision scheint auf “Lazy Evaluation” komplett zu verzichten und ganz fleißig jeden logischen Ausdruck bis zum Ende durchzurechnen.
Mit folgendem Beispiel kann man das leicht nachprüfen:
IF A AND B THEN MESSAGE('A and B'); ... PROCEDURE A@1000000001() : Boolean; BEGIN MESSAGE('A'); EXIT(FALSE); END; PROCEDURE B@1000000002() : Boolean; BEGIN MESSAGE('B'); EXIT(TRUE); END;
Wenn man diesen Code ausführt werden beide Messages (‘A’ und ‘B’) angezeigt, obwohl eigentlich nach Funktion A der Term A AND B schon als falsch ausgewertet werden kann. Wenn man selbiges Beispiel in C# aufschreibt wird übrigens nur A() ausgeführt:
if (A() && B()) MessageBox.Show("A and B"; ... bool A() { MessageBox.Show("A"); return false; } bool B() { MessageBox.Show("B"); return true; }
Ähnlich verhält es sich auch mit allen anderen logischen Ausdrücken – Navision rechnet bis ganz zum Ende alles durch.