[Gelöst] REPEAT ... UNTIL FALSE

18. April 2007 13:56

Codeunit 22, Funktion ApplyItemLedgEntry arbeitet mit einer REPEAT-Schleife der Form
Code:
REPEAT
[...]
UNTIL FALSE;


Versteh ich synthaktisch überhaupt nicht. WAS soll da FALSE werden? Was wird da abgefragt? Welchen Sinn hat diese Schleife? Soll es einfach nur eine Endlosschleife darstellen (daher die vielen EXITs)?
Zuletzt geändert von Natalie am 18. April 2007 14:39, insgesamt 1-mal geändert.

18. April 2007 14:04

Hallo Natalie,

du hast es ja doch verstanden! :wink:

Dies für sich genommen, ist eine Endlosschleife, das FALSE nie TRUE werden kann. Die Schleife kann nur durch die verwendeten EXITs verlassen werden.

So programmiert halt jeder anders (und nicht jeder programmiert wirklich schön).

Gruß
Frank

18. April 2007 14:18

Puh, immerhin *g*

Trotzdem will mir nicht in den Schädel, dass Navision keine Variable (irgendwas!) verlangt, die überhaupt FALSE und damit abgefragt werden kann. Oder wir sehen die nur nicht.
Hast du eine Idee?

18. April 2007 14:36

Es wäre sicherlich interessant, wenn der Compiler hier eine Warnung ausgeben würde - aber natürlich würden findige Programmierer dann auf ähnliche Lösungen kommen (z. B. UNTIL (1 = 0), UNTIL (TODAY < 0D), UNTIL (STRLEN('') > 100), ... also mir würden da wohl noch ein paar Vergleiche einfallen :lol:).

Da der Compiler eine Endlosschleife nicht ausschließen kann, lohnt sich die Prüfung hierauf auch nicht. Ich könnte mir aber vorstellen, dass VisualStudio bei einer solchen Konstellation eine Warnung ausgeben würde - muss ich bei Gelegenheit mal probieren.

Gruß
Frank

18. April 2007 14:36

@Natalie

UNTIL NEXT=0;

Ist es doch:
UNTIL erwartet ein TRUE oder FALSE.
Wenn bei einer "normalen" Schleife die Datensätze durchlaufen werden,
ist der Rückgabewert von "Next=0" FALSE

Werden keine Daten mehr gefunden ist der Wert TRUE.
(man könnte NEXT als Funktion ansehen, die einen Rückgabewert liefert)
Gruß Mikka

18. April 2007 14:39

Auch wieder wahr ...
Danke, sehe den Wald vor lauter Bäumen nicht (und fast hätte ich auch die Bäume vor lauter Wald nicht mehr gesehen *Doing*)