Conditional
Conditional statements are used in a program to alter the operational flow. That is, to decide which statement or statements to execute, based on the evaluation of a single value or expression. Firewing supports three types of conditional statements: if…then, select…case and conditional jump.
The If…Then Statement
if expression then
statements
[elseif expression then]
{statements}
[else]
{statements}
end if
The if…then statement is used to make a program execute user code, but only when certain conditions are met. If an expression evaluates to true, then any statements following the evaluation are executed. If no expression evaluates to true, then any statements contained after an optional else are executed. For example,
Sub Main() Dim value As Byte = 0 Dim message As String If value <= 10 Then message = "OK" ElseIf value > 10 And value < 20 Then message = "Warning" Else message = "Error" End If End Sub
The Select…Case Statement
select expression
case condition {, condition}
{statements}
…
[else {statements}]
end select
Although there is nothing technically wrong with using large if…then blocks, it can sometimes be difficult to read them. The select…case statement is an alternative to using a large or multiple if…then…elseif statements. For example,
Sub Main() Dim menuChoice As Char = "c" Dim message As String Select menuChoice Case "Q", "q" message = "Quit" Case "M", "m" message = "Main Menu" Case "A", "a" message = "Option A" Case "B", "b" message = "Option B" Case "C", "c" message = "Option C" Case Else message = "Error" End Select End Sub
In this example, the select part is a single char type which is tested against each successive case condition. The commas used in the case conditions are equivalent to using an if statement’s logical or operator. For example, you could write the first case as an if…then statement in the following way,
If MenuChoice = "Q" Or MenuChoice = "q" Then
If one of the case conditions is met, then any statements following the condition are executed and the program jumps to any code immediately following end select. If no case conditions are met, statements contained in the optional else clause are executed. Case conditions can also include relational operators, or the "to" operator can be used for a range of values. For example,
Select value * 2 Case < 10, > 100 result = 1 Case 10 To 20, 50 To 100 result = 2 Case Else result = 0 End Select
In this example, value is multiplied by two and then tested against each case condition. If the select expression is < 10 or > 100, then result becomes equal to 1. If the select expression is in the range 10 to 20 or 50 to 100, then result becomes equal to 2. If none of the select conditions are met, result is set to 0 in the select…case else block.
Conditional Jump
if expression then goto label
The conditional jump is a special construct that can be used with a standard goto statement. For example,
Sub Main() Dim value As Byte = 0 Dim Led As PORTB.0 If value <> 0 Then GoTo SkipCode High(LED) DelayMS(500) SkipCode: Low(Led) End Sub
Notice the difference in syntax when compared to a normal if…then statement. Firstly, no "end if" is required. You can of course use a goto inside a normal if…then statement, but the above form allows you to write the same thing more concisely.
The goto statement has a nasty reputation because of its ability to jump to almost anywhere. Some people view this lack of control as very bad. Using a goto can produce what is called spaghetti code. It gets this name because with a goto infested program, drawing a line between a goto and its destination label would look like a big plate of spaghetti. Used with care, a goto statement can be useful.
However, given the highly structured nature of the compiler language, a goto statement should be used sparingly and is best avoided.


