{{fbdoc item="title" value="IF...THEN"}}----
Control flow statement for conditional branching

{{fbdoc item="syntax"}}##
	**If** //expression// **Then** [//statement(s)//] [**Else** [//statement(s)//]] [**End If**]
//or//
	**If** //expression// **Then** : [//statement(s)//] [**Else** [//statement(s)//]] : **End If**
//or//
	**If** //expression// **Then**
		[//statement(s)//]
	[ **Elseif** //expression// **Then** ]
		[//statement(s)//]
	[ **Else** ]
		[//statement(s)//]
	**End If**
##
{{fbdoc item="desc"}}
	##**If...Then**## is a way to make decisions. It is a mechanism to execute code only if a condition is true, and can provide alternative code to execute based on more conditions.
	
	##//expression//## can be one of several forms:
		- a conditional expression, for example:
			##x = 5##
		- multiple conditions separated by logical bit-wise operators, for example:
			##x >= 5 [[KeyPgOpAnd And]] x <= 10##
		- multiple conditions separated by logical short-circuit operators, for example:
			##y <> 0 [[KeyPgOpAndAlso AndAlso]] x \ y = 1##
			(in this case, "##x \ y = 1##" will only be evaluated if "##y <> 0##" is True)
		- any numerical expression, in which case a value of zero (##0##) represents False, and a non-zero value represents True

	Both multi-line and single-line ##**If**##s can be nested.  In the latter case, the optional ##**End If**##s can be useful to control where nested ##**If**##s begin and end.

	In the //[[CompilerOptlang -lang fb]]// and //[[CompilerOptlang -lang fblite]]// dialects, colons (##:##) can be used instead of newlines to construct multi-line ##**If**## blocks on a single line.

{{fbdoc item="ex"}}
{{fbdoc item="filename" value="examples/manual/control/if-then.bas"}}%%(freebasic)
'' Here is a simple "guess the number" game using if...then for a decision.

Dim As Integer num, guess

Randomize
num = Int(Rnd * 10) + 1 'Create a random number between 1 and 10...
	            
Print "guess the number between 1 and 10"

Do 'Start a loop

	Input "Guess"; guess 'Input a number from the user

	If guess > 10 OrElse guess < 1 Then  'The user's guess is out of range
		Print "The number can't be greater then 10 or less than 1!"
	ElseIf guess > num Then  'The user's guess is too high
		Print "Too high"
	ElseIf guess < num Then  'The user's guess is too low
		Print "Too low"
	ElseIf guess = num Then  'The user guessed the right number!
		Print "Correct!"
		Exit Do   'Exit the loop
	End If

loop 'Go back to the start of the loop
%%

{{fbdoc item="lang"}}
	- In the //[[CompilerOptlang -lang qb]]// and //[[CompilerOptlang -lang fblite]]// dialects, variables declared inside an ##**If**##..##**Then**## block have a procedure-wide [[ProPgVariableScope scope]]  as in QB 
	- In the //[[CompilerOptlang -lang fb]]// and //[[CompilerOptlang -lang deprecated]]// dialects, variables declared inside an ##**If**##..##**Then**## block are visible only inside the block, and cannot be accessed outside it.
	- In the //[[CompilerOptlang -lang qb]]// dialect, if there is a new line or a single-line comment (##'##) directly after THEN, then the IF will be multi-line.  A colon, a ##[[KeyPgRem Rem]]## or any other statement will result in a single-line IF.
	- In the //[[CompilerOptlang -lang fb]]// and //[[CompilerOptlang -lang fblite]]// dialects, if there is a new line, a single-line comment (##'##), a colon (##:##), or a ##[[KeyPgRem Rem]]## statement directly after THEN, then the IF will be multi-line.  Any other statement will result in a single-line IF.

{{fbdoc item="diff"}}
	- END IF was not supported in single-line IFs in QBASIC.

{{fbdoc item="see"}}
	- ##[[KeyPgDoloop Do...Loop]]##
	- ##[[KeyPgPpif #if]]##
	- ##[[KeyPgSelectcase Select Case]]##

{{fbdoc item="back" value="CatPgControlFlow|Control Flow"}}