flag IF code ENDIF
or
flag IF code1 ELSE code2 ENDIF
You can use THEN
instead of ENDIF
. Indeed, THEN
is
standard, and ENDIF
is not, although it is quite popular. We
recommend using ENDIF
, because it is less confusing for people
who also know other languages (and is not prone to reinforcing negative
prejudices against Forth in these people). Adding ENDIF
to a
system that only supplies THEN
is simple:
: endif POSTPONE then ; immediate
[According to Webster's New Encyclopedic Dictionary, then (adv.) has the following meanings:
... 2b: following next after in order ... 3d: as a necessary consequence (if you were there, then you saw them).
Forth's THEN
has the meaning 2b, whereas THEN
in Pascal
and many other programming languages has the meaning 3d.]
Gforth also provides the words ?dup-if
and ?dup-0=-if
, so
you can avoid using ?dup
. Using these alternatives is also more
efficient than using ?dup
. Definitions in plain standard Forth
for ENDIF
, ?DUP-IF
and ?DUP-0=-IF
are provided in
`compat/control.fs'.
n CASE n1 OF code1 ENDOF n2 OF code2 ENDOF ... ENDCASE
Executes the first codei, where the ni is equal to
n. A default case can be added by simply writing the code after
the last ENDOF
. It may use n, which is on top of the stack,
but must not consume it.