# While 循环 [v1.0.48+]

重复执行一系列命令, 一直到指定的表达式计算结果为假.

    While Expression
    While(Expression)

## 参数

Expression

  任何有效的表达式. 例如: `while x < y`.

## 备注

在每次重复执行前都会计算一次表达式. 如果表达式计算结果为 true(即除空字符串和数值 0 以外的任何结果), 那么执行循环体; 否则跳到循环体之后一行执行.

while 循环后通常跟着区块, 这是组成循环 体 语句的集合. 不过, 在单语句的循环中可以不使用区块(用于此目的时 "if" 与其相匹配的 "else" 一起被视为单语句).

可以使用 One True Brace(OTB) 风格, 这样允许左大括号与 while 在同一行而不是在其下面. 例如: `while x < y {`.

内置变量 A_Index 包含当前循环重复的次数. 首次计算循环的表达式和执行循环体时其值为 1. 第二次时其值为 2; 依此类推. 如果一个内层循环包含在一个外层循环中, 那么内层循环具有优先权. A_Index 在所有类型的循环中都有效, 但是在循环外部时其值为 0.

和所有的循环一样, 可以使用 Break 提前退出循环. 同样地, 可以使用 Continue 跳过当前循环的剩余部分, 此时 A_Index 增加 1 且重新计算 while 循环的表达式. 如果结果仍为 true, 开始新的循环; 否则循环结束.

专用循环: 循环可以用来自动获取文件, 文件夹或注册表项(每次一个). 请参阅文件循环和注册表循环了解详细信息. 此外, 文件读取循环可以对整个文件的内容进行操作, 每次一行. 最后, 解析循环可以对包含在可分隔的字符串中的单独片段进行操作.

## 相关

Until, Break, Continue, 区块, Loop, For 循环, 文件和文件夹循环, 注册表循环, 文件读取循环, 解析循环, If (表达式)

## 示例

当用户按住鼠标左键拖动时, 在拖动区域中会出现工具提示区域的大小.

    CoordMode, Mouse, Screen

    ~LButton::
        MouseGetPos, begin_x, begin_y
        while GetKeyState("LButton")
        {
            MouseGetPos, x, y
            ToolTip, % begin_x ", " begin_y "`n" Abs(begin_x-x) " x " Abs(begin_y-y)
            Sleep, 10
        }
        ToolTip
    return

dftg