Van Vugt's dynamiXs

All around NAV dev and test

BREXIT? Nope, BREAK <> EXIT

Coming from a C/C++ world into NAV, ages ago, it was somewhat dismaying to feel the various constraints of the system. And true, to also feel the power of it, not in the least because of these constraints, IMHO. But hell, isn't this always the case when changing? I mean, when changing, whatever. Habits. Tools. On-premise to cloud. Your partner. Or we could be still in a honeymoon state of mind and find out the constraints later.

Well, long story short. One thing I was very surprised by was the BREAK statement in NAV. Probably I am wrong, but my head kept on saying: any programming language has a BREAK statement allowing to break out of the current loop (or switch) construction and continue just after it. And yes, NAV did have (and still has) a BREAK statement, but only within the Dataport, Report and XMLport objects.

And now, finally, after all these years [emotional sob], with NAV 2016, BREAK has become what-I-always-wanted-it-to-be, allowing me "... to break out of the current loop (or switch) construction and continue just after it."

Yesss!

And contrary to what the help topic title (still) seems to suggest BREAK Function (Report, XMLport), it is valid in any object now. Just try for example the following in a codeunit:

Window.OPEN('i = #1###');

FOR i :=1 TO 10 DO BEGIN
  Window.UPDATE(1,i);
 
SLEEP(
500);
 
IF i = 6 THEN
   
BREAK;
END;

Window.CLOSE

It works just fine.

Reading the help topic in detail don't let yourself be mislead:

no BREXIT, i.e. BREAK <> EXIT

Because contrary to what the remark in the topic says (notice my red coloring):

BREAK causes the current trigger to end. When used inside a loop, such as a WHILE-DO or REPEAT-UNTIL construction, BREAK interrupts the loop and causes the current trigger to end.

Nope, BREAK will just interrupt the loop and "continue just after it". To cause the current trigger to end we already have EXIT don't we?

Note

When you program a BREAK outside a loop the compiler will throw an error:

BREAK statement can only appear inside a loop (FOREACH, FOR, WHILE, REPEAT).