Commodore‎ > ‎BASIC‎ > ‎Keywords‎ > ‎

THEN

Keyword Abbreviation Token (hex) Version(s) Classification
THEN T{Shift+H} A7 1.0 to 7.0 Preposition

  Syntax  
IF condition GOTO lineNumTrue | THEN [ lineNumTrue | BEGIN ] } [ statementT ] [ : statementT ] ...
[ statementT : ] ... BEND junk1 ] [ : ELSE lineNumFalse BEGIN ] [ statementF ] [ : statementF ] ...
[ statementF : ] ... BEND junk2 ] ]
 
Parameters Type Legal Value(s) Default Value Note(s)
condition Boolean   all numeric  
lineNumTrue
Unsigned integer
0 ~ 63999
Must be a literal number
Branched to when condition is true (not 0)
statementT
Command or Statement all*
Must be valid in current direct/RUN mode
Executed when condition is true (not 0)
junk1
Literal character(s)
any but colon (:)
ignored; similar to DATA
lineNumFalse
Unsigned integer
0 ~ 63999
Only valid in v3.5, 4.7, and 7.0
Must be a literal number.
Branched to when condition is false (0)
statementF
Command or Statement
all*  
Only valid in v3.5, 4.7, and 7.0
Must be valid in current direct/RUN mode
Executed when condition is false (0)
junk2
Literal character(s)
all
ignored; just like REM

 
  Purpose  
Program flow control.  Conditionally execute statement(s) or change program execution line.

 
  Remarks  
Because the syntax shown above is rather complex, let me explain the 3 possibilities with the THEN clause.  THEN may be followed by:
  1. a literal line number (a numeric variable or expression is forbidden),
  2. or a series of statements that must all fit on the same line,
  3. or the BEGIN keyword (allows for multiple lines, but only in v7.0).
The THEN clause is only executed when the condition is true (evaluates to non-zero).
 
Like most prepositions, attempting to use THEN by itself (as a command or statement) will generate a SYNTAX ERROR.
 
The first statement following THEN (or lineNumTrue, lineNumFalse, BEGIN, or ELSE), if any, does not need a leading colon (:). This makes typing programs a bit easier and saves a byte; however, many BASIC extensions will fail if a leading colon is not present.  It seems this is a hack written by Microsoft in the original version of BASIC.  It essentially short-circuits the normal BASIC execution logic, with some ugly side-effects.  Besides causing trouble for BASIC extensions, HELP will highlight the entire IF / THEN / ELSE construct when the error occured in the THEN clause; similarly error trapping is messed up; the hacked implementation also delays execution of a COLLISION routine.
 
The Syntax allows THEN (but not ELSE) to be replaced with GOTO for program branching, but attempting to use GO TO in this case will cause SYNTAX ERROR.  You can blame Commodore for this bug.
 
* The selected command/statement(s) must be valid for the current Interpreter mode (Direct Mode or Run Mode, per the current state of the BASIC Interpreter).
  
Example 1:
IF 1 THEN PRINT "TRUE"
TRUE

READY.
X=0: IF X=1 THEN PRINT "TRUE"

READY.
IF X=0 THEN PRINT "EQUALS ZERO IS TRUE" : ELSE PRINT "UNTRUE"
EQUALS ZERO IS TRUE

READY.
NEW
10 X=1 : IF X=1 THEN BEGIN
20 : PRINT "TRUE" : X = 2 : BEND : ELSE PRINT "FALSE" : X = 0
30 PRINT X
RUN
TRUE
 2

READY.
  
Example 2 is for BASIC v1.0 and v2.x which lack an ELSE clause (uses GOTO):
NEW

READY.
10 X=1 : IF X=1 THEN PRINT "TRUE" : X=2 : GOTO 30 :REM THEN clause + GOTO to skip ELSE clause
20 PRINT "FALSE" : X = 0 : REM the ELSE clause
30 PRINT X
RUN
TRUE
 2

READY.
 
  See Also  
 
  Compare With  

© H2Obsession, 2014
Comments