The IF Statement
 
Written by rdc

您可以将If语句块视为需要True或False答案的问题。答案决定您的程序将执行哪段代码。由于电脑只能使用数字,所以您将该问题作为条件方程来形成,这将导致F为0或为True时为非零。

If语句具有以下格式。

If <expression> Then Do something[:Do something]


<表达式>是需要True或False答案的问题。如果答案为True,即不是False,那么执行Then之后的代码。如果答案为False,则执行下一行代码。

如果用冒号分隔语句,则可以在Then之后执行多个语句。所有的声明必须在同一行。更简单的格式是使用IF代码块,如下所示。

If <expression> Then
    Do something 1
    Do something 2
    ...
End If


以这种格式,如果答案为True,则执行Then之后的代码块,从语句1开始并执行所有语句,直到达到结束If。然后程序将在End If之后开始执行代码。如果答案为False,则跳过代码块中的代码,并执行End If之后的代码。

If <expression> Then
    Do something
    ...
Else
    Do something Else
    ...
End If


如果<表达式>为True,则执行Then之后的代码。如果答案为False,则执行Else之后的代码。在这种格式下,您可以同时处理<表达式>的True和False答案。

If <expression> Then
    Do something
ElseIf <expression> Then
    Do something
End If


如果<表达式>为True,则执行Then之后的代码。如果答案为False,则执行ElseIf。如果ElseIf为True,则执行Then(Of ElseIf)之后的代码,否则执行End If之后的代码。您可以拥有尽可能多的ElseIf语句,因为您需要完全涵盖所需问题的范围。

If <expression> Then
    Do something
ElseIf <expression> Then
    Do something
Else
    Do something Else
End If


此格式是所有其他格式的组合。如果<表达式>为True,则执行Then之后的代码。如果答案为False,则执行ElseIf。如果ElseIf为True,则执行Then(Of ElseIf)之后的代码,否则执行Else之后的代码。

这种格式使您能够询问一系列问题,如果所有问题的答案都为False,则可以根据Else块执行默认操作。

您可以看到,您可以通过多种方式构建问题,然后根据多个答案组合执行代码。这给您提供了很大的灵活性,如何根据答案构建问题和做什么。

<表达式>是需要答案的问题,您使用逻辑运算符构建问题。

您可以在If语句中混合算术和逻辑运算符以及括号。编译器从左到右评估条件语句,同时考虑到运算符的优先级。例如,以下所有代码片段都是合法的If语句构造。

If var1 = 5 Then
If (var1 = 5) And (var2 < 3) Then
If (var1 + 6) > 10 Then


您将注意到,括号用于对表达式的不同部分进行分组。您应该使用括号来确保您正在执行表达式的逻辑部分。表达式必须最终解析为True或False,即使您在表达式中使用算术运算符。

在If语句中使用按位运算符


请记住,运算符和,或者是和否是按位运算符。也就是说,它们根据它们执行的按位操作返回一个值。在If语句中使用按位操作符时,您应该小心,以确保结果正确评估。

拿上面列出的第二个代码片段。

If (var1 = 5) And (var2 < 3) Then


如果var1等于5,则编译器将返回True,或表达式返回-1。如果var2小于3,那么编译器将为此表达式返回True或-1。编译器将用-1和-1返回-1来评估And运算符。由于-1不为零,或为True,则Then后面的代码将被执行。

如果括号内的任何一个语句计算为0,则And将返回0,该值为False,Then子句后面的代码将被跳过。当使用按位运算符时,应该在按位运算符的任一侧框架条件表达式,以使它们返回True或False。这将在您的评估中给出一致的结果。

不是问题


在If语句中,非按位运算符可能是一个问题。您可能习惯于撰写If Not var Then ,不执行逻辑而不是按位操作。在FreeBasic中不执行按位操作,而不是逻辑运算。

如果var包含值3,那么Not 3将为-4,这将被视为True结果,Then后面的代码将被执行,这可能不是你想要的。不要写If Not var Then ,您应该写If var <> 0 Then .

重叠条件


使用复合条件时,必须注意确保条件不重叠。在大多数情况下,重叠的条件将产生不可预测的结果。每个条件都必须产生独特的结果,并且个别结果的组合本身必须表现出独特的结果。这在If-ElseIf构造中非常重要; If-ElseIf块中的重叠条件可能在错误的时间执行错误的代码。

嵌套如果语句


有时可能需要嵌套If语句来更好地描述评估的决策过程。虽然If语句可以处理表达式中的多个参数,但有时您可能希望逐步检查可以使用嵌套If块执行的某些值范围。

If <expression> Then 
    <statement>
    ...
    If <expression> Then
        <statement>
        <statement>
        ...
    End If
End If


重要的是使用End关闭每个块正确如果当由If打开以避免编译器或逻辑错误时。编译器错误很容易修复,而逻辑错误可能难以追踪和纠正。确保正确关闭块的最佳方式是缩进嵌套的If语句,然后将匹配的End If语句缩进到与If相同的级别。在上面的例子中,缩进可以一目了然地告诉你哪个End If与哪个If。

IIF功能


Iif或“immediate If”函数根据表达式返回两个数值之一。您可以考虑将Iif函数作为行为函数调用的In-Line If语句。

Value = IIf(<expression>, numeric_value_if_true, numeric_value_if_false)


Iif可以作为一个独立的函数或其他表达式中使用,您不想拆分表达式来插入一个If语句。数值可以是文字值,变量或数字函数调用。功能的限制是它只返回一个数字值,而不是字符串值,但是您可以通过使用指针来解决此限制。

Iif语句将评估True和False条件,所以您需要注意,即使不从函数返回该条件,也不会执行非法操作,例如在条件中除以零。


构成问题


If语句是一个强大的工具,但您需要确保正确地构建问题,即表达式。每个表达式必须解析为True或False,True将始终执行Then之后的代码。

当写一个If语句时,你必须问自己,这个表达式是否解决为True或False?对于在表达式中具有多个术语的复合表达式尤其如此。每个术语必须解决为True或False,并且术语的总和必须解析为True或False。如果复合表达式正确评估有疑问,请将其分解为嵌套的If语句。

检查范围值


通常情况下,您需要在If语句中检查一系列值,为了使编译器正确地评估范围条件,您必须正确地对表达式进行构图。基本上有两种类型的范围表达式:独占和包含范围。排除范围表达式排除一系列值。包含范围表达式包含一系列值。每个都有一个必须遵循的特定格式进行适当的评估。

排除一系列价值观

假设你有一个值的范围,如果值小于或等于1,或者值大于或等于10,你想做一些特别的事情。换句话说,你想从特别行动中排除数字2到9。

您可以将其作为一个问题来构建,然后可以将其转换为代码。

Is the value a number less than Or equal To 1 Or a number greater than Or equal To 10?
If Yes, Then Do special action.
If No, Then Do standard action.


这里的关键是OR。如果值的下限等于或小于1,或者值的上限等于或大于10,则执行特殊操作。

If (value <= 1) Or (value >= 10) Then
    do_special
Else
    do_standard
End If


请记住,如果任一条件为True,OR将返回True。如果值为1或更小,或值为10或更大,则表达式将返回True,并执行特殊操作。

包括一系列价值观

包容与排斥相反。您可能会猜到,格式与您相似,但您使用与OR运算符相反的And运算符。

假设你想做一些特别的事情,如果值是5,6或7。那就是你想在你的范围表达式中包含这些数字。再次,你可以先问一个问题。

Is the value a number between 5 And 7 (inclusive)?
If Yes, Then Do special action
If No, Then Do standard action


在这里,你要包括号码5,6,7来考虑。也就是说,如果值为5或更大,值为7或更小,那么请执行特殊操作。这转换为以下代码片段。

If (value >= 5) And (value <= 7) Then
    do_special
Else
    do_standard
End If


请记住,如果两个操作数返回True,那么And运算符将只返回True。如果值为6,则6大于5,6也小于7,因此两个语句都为True,表达式计算结果为True。