The If command is the most basic tool in programming. The idea is simple: it checks a condition, and then does something only if the condition is true.
If by itself
With the simplest use of If, the line after it will be skipped if the condition is false.
In the code below, if x really is 4, then the check x=4 is true, so the program will display "x equals 4". If x is not 4, then the check will be false, so Text "x equals 4" will be skipped. Nothing will be displayed.
:If x=4 : Text "x equals 4"
To have multiple lines of code depend on the same condition, use the If condition Then..EndIf syntax. Every line before the EndIf will be skipped if the condition is false.
In the following example, both true→xisfour and Text "x equals 4" depend on the condition x=4.
:If x=4 Then : true→xisfour : Text "x equals 4" :EndIf
Often, you want to do one thing if the condition is true, and another if the condition is false. The way to do this is to insert an Else into the If..EndIf block. Everything between If condition Then and Else is what happens when the condition is true. Everything between Else and EndIf is what happens when the condition is false.
Note: the Else command is also used inside Try..EndTry blocks.
In the following example, "x is 4" will be displayed if x=4, and "x is not 4" otherwise.
:If x=4 Then : Text "x is 4" :Else : Text "x is not 4" :EndIf
Finally, you can use ElseIf condition Then, inside an If..EndIf block, to consider several conditions at the same time. The way this works is: first the basic If condition is checked. If it's true, then the code just after If runs. If that condition was false, but there's an ElseIf, the ElseIf's condition is checked. If it's true, then the code just after the ElseIf runs. If that condition was false too, the program goes on to check the next ElseIf (if there is one), and so forth. You can also include a final Else (optionally) which will only run if no condition is met.
:If x=4 Then : Text "x is 4" :ElseIf x=5 Then : Text "x is 5" :ElseIf x=6 Then : Text "x is 6" :Else : Text "x is neither 4, 5, nor 6" :EndIf
What kind of conditions are possible? Any command that returns a logical value — true or false — is acceptable. This includes:
- Relational operators: =, ≠, >, ≥, <, and ≤
- Logical operators: and, or, xor, not
- Any advanced test command: pxlTest(), isPrime(), and others.
- A variable that contains one of the values true or false, or a function that returns them.
Of course, these can also be combined: for example, isPrime(x) and x≠2 is a valid condition.
Use If without a Then or EndIf for only one command; use Then and EndIf otherwise.
In addition, the when() command can often replace If.
20 - A test did not resolve to TRUE or FALSE happens when the condition is indeterminate, or the wrong data type.
280 - Else and ElseIf invalid outside If..Then block happens when Else or ElseIf are used outside If..EndIf.
730 - Missing start or end of block syntax happens when the If-Thens and EndIfs don't match up correctly.
740 - Missing Then in the If..EndIf block happens when a Then is missing.