# If (表达式)

指定在表达式计算结果为 true(真) 时执行的一个或多个语句.

    If (表达式)
    {
        语句
    }

## 备注

包含表达式的 If 语句通常通过将表达式括在括号中来区别于传统-If 语句(如 `If FoundColor != Blue`). 但是, 这并不是严格要求的, 因为任何不匹配传统 if 模式的 If 语句都假定为包含表达式. 特别地, 以下也是编写 If (表达式) 的常用方法:

- 以开括号开始, 但不完全包围表达式: `if (x > 0) and (y > 0)`
- 以函数调用开始: `if InStr(a, b)`
- 以运算符开始(如 `not` 或 `!`): `if !MyVar`

已知限制: 由于历史原因, If (表达式) 实际接受数字参数而不是纯表达式. 例如, `if %MyVar%` 等同于 `if MyVar`. 这可以通过始终将表达式括在括号中来避免.

如果 If 语句中表达式的计算结果为 true(即除空字符串和数值 0 以外的任何结果), 那么执行 if 语句下的行或区块. 否则如果有相应的 Else 语句, 则会跳到 else 下的行或区块执行.

如果 If 拥有多行, 那么这些行必须用大括号括起来(创建一个区块). 但是, 如果只有一行属于 If, 则大括号是可选的. 请参阅此页面底部的示例.

`if` 关键字与后面的左括号之间的空格可有可无, 比如这样写 `if(expression)` 也是完全一样的.

One True Brace(OTB) 风格可用于表达式形式的 If 语句中(但不能用于传统的 If 语句). 例如:

    if (x < y) {
        ; ...
    }
    if WinExist("Untitled - Notepad") {
        WinActivate
    }
    if IsDone {
        ; ...
    } else {
        ; ...
    }

与 If 语句不同, Else 语句支持任何类型的语句紧跟在其右边.

相关提示, 语句 if var [not] between LowerBound and UpperBound 判断变量是否在两个值之间, 而 if var [not] in value1,value2 可以用来判断变量内容是否存在于值列表中.

## 相关

表达式, 赋值表达式(:=), if var in/contains, if var between, IfInString, 区块, Else, While 循环

## 示例

如果 A_Index 大于 100, 则返回.

    if (A_Index > 100)
        return

如果 `A_TickCount - StartTime` 的结果大于 `2*MaxTime + 100` 的结果, 显示 "Too much time has passed." 并终止脚本.

    if (A_TickCount - StartTime > 2*MaxTime + 100)
    {
        MsgBox Too much time has passed.
        ExitApp
    }

本例执行如下:

1. 如果 Color 是单词 "Blue" 或 "White":
   1. 则显示 "The color is one of the allowed values.".
   2. 终止脚本.
2. 否则如果 Color 是单词 "Silver":
   1. 显示 "Silver is not an allowed color.".
   2. 停止进一步的检查.
3. 否则:
   1. 显示 "This color is not recognized.".
   2. 终止脚本.

    if (Color = "Blue" or Color = "White")
    {
        MsgBox The color is one of the allowed values.
        ExitApp
    }
    else if (Color = "Silver")
    {
        MsgBox Silver is not an allowed color.
        return
    }
    else
    {
        MsgBox This color is not recognized.
        ExitApp
    }

单个多语句行不需要用大括号括起来.

    MyVar := 3
    if (MyVar > 2)
        MyVar++, MyVar := MyVar - 4, MyVar .= " test"
    MsgBox % MyVar  ; 报告 "0 test".

dftg