IF
BASIC keyword | |
Keyword: | IF |
Abbreviation: | - |
Type: | Command |
Token code: | 139/$8B |
Handling routine in BASIC ROM: |
-–- $-–- |
List of all BASIC keywords |
Remark: This article describes the BASIC command IF in BASIC V2 at the Commodore 64.
Typ: Command General Programming-Syntax: IF <equation> THEN <linenumber> or IF <equation> GOTO <linenumber> or IF <equation> THEN <command>
The BASIC command IF is used to test a "condition". If the condition produces a non-zero value, the statements after the THEN or GOTO are performed. When the condition is false then the BASIC interpreter will ignore the rest of the BASIC commands in the line.
For the condition the following relational operators are useful:
- = equal
- <> unequal
- < less than
- > greater
- <= less-equal
- >= greater-equal
Furthermore, logical operators like AND, OR or NOT can be used to combine several conditions, and parentheses () to override precedence order.
When the command is GOTO, GOSUB or THEN <line>, the system will perform a branch. The performance of branches gets progressively worse as the program size grows. This can be addressed to some degree by understanding the line-lookup process.
Examples[edit | edit source]
10 PRINT CHR$(147); 20 INPUT "2 numbers, please: ";A$, B$ 30 IF A$="" OR B$="" THEN 20 40 A=VAL(A$): B=VAL(B$) 50 IF A>0 THEN PRINT "A is positive and "; 51 IF A<0 THEN PRINT "A is negative and "; 52 IF A=B THEN PRINT "A is equal to B "; 53 IF A<>B THEN PRINT "A is not equal to B "; 54 IF NOT A AND NOT B THEN PRINT ", neither number is -1"; 55 IF A=64 AND B=64 THEN PRINT " !!! BINGO !!!": GOTO 58 56 IF A=B AND A=0 GOTO 58 57 IF (A AND B=0) OR (NOT B AND A=0) THEN END 58 FOR X=0 TO 3000: NEXT 59 GOTO 10
Technically what happens is the expression is evaluated, and if the expression is 0, the statements after THEN or GOTO are not executed. If the expression is non-zero, the statements after THEN or GOTO will be executed. So something like this can be used:
10 IF A THEN PRINT "A is nonzero"
Note that Microsoft-derived BASICs like Commodore BASIC treat all of the statements on the line after then THEN as part of the IF statement, and they will all run or not as a group. This is not true of all BASICs, for instance, the original Dartmouth BASIC treated only the statement immediately after the THEN as part of the IF. To understand the difference, consider this code:
10 IF 1=0 THEN PRINT"HELLO":PRINT"WORLD"
In Dartmouth BASIC and others that follow the same pattern, the output of this line is WORLD. In Commodore BASIC, there will be no output because both PRINT statements are considered part of the IF.
An example of how to compute the maximum among three numbers:
10 input "enter a";a 20 input "enter b";b 30 input "enter c";c 40 if a>=b and a>=c then m=a:goto 70 50 if b>=c then m=b:goto 70 60 m=c 70 print "max:";m
An example of how to solve a quadratic equation ax2 + bx + c=0:
10 print "enter equation" 20 input "a";a 30 input "b";b 40 input "c";c 50 d=b^2-4*a*c 60 if d<0 then print "no real roots":goto 200 70 if d=0 then print "one root:";-b/(2*a):goto 200 80 print "two roots" 90 x1=(-b+sqr(d))/(2*a) 100 x2=(-b-sqr(d))/(2*a) 110 print "x1:";x1 120 print "x2:";x2 200 end
ABS | AND | ASC | ATN | CHR$ | CLOSE | CLR | CMD | CONT | COS | DATA | DEF | DIM | END | EXP | FN | FOR | FRE | GET | GET# | GOSUB | GOTO | IF | INPUT | INPUT# | INT | LEFT$ | LEN | LET | LIST | LOAD | LOG | MID$ | NEW | NEXT | NOT | ON | OPEN | OR | PEEK | π | POKE | POS | PRINT | PRINT# | READ | REM | RESTORE | RETURN | RIGHT$ | RND | RUN | SAVE | SGN | SIN | SPC | SQR | STATUS/ST | STEP | STOP | STR$ | SYS | TAB | TAN | THEN | TIME/TI | TIME$/TI$ | TO | USR | VAL | VERIFY | WAIT