# While-loop

重复执行一条或多条语句, 直到指定的表达式计算结果为假时终止.

    While Expression

## 参数

Expression

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

## 备注

如果表达式括在括号中, `While` 后的空格或制表符是可选的, 例如 `While(expression)`.

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

while 循环后通常跟着区块, 这是形成循环 主体 的语句的集合. 但是, 只有一个语句的循环不需要区块(为此, "if" 及其 "else" 计为单个语句).

One True Brace(OTB) 样式可选使用, 这使得开括号可以出现在同一行, 而不是下面一行. 例如: `while x < y {`.

内置变量 A_Index 包含当前循环迭代的次数. 第一次执行循环的表达式和循环体时, 它包含 1. 第二次, 它包含 2; 等等. 如果内部循环被外部循环包围, 则内部循环优先. A_Index 在所有类型的循环内工作, 但在循环外为 0.

与所有循环一样, Break 可用于提前退出循环. 此外, Continue 可用于跳过当前迭代的其余部分, 在此期间 A_Index 增加 1, 而 while 循环的表达式将被重新计算. 如果仍然为 true, 则开始新的迭代; 否则, 循环结束.

循环后面可以有一个可选的 Else 语句, 如果循环的迭代次数为零, 则执行 Else 语句.

专用循环: 循环可以用来自动检索文件, 文件夹或注册表项(每次一个). 有关详情, 请参阅 file-loop 和 registry-loop. 此外, file-reading loops 可以对整个文件的内容进行操作, 每次一行. 最后, parsing loops 可以对可分隔的字符串中包含的各个字段进行操作.

## 相关

Until, Break, Continue, 区块, Loop, For-loop, Files-and-folders loop, Registry loop, File-reading loop, Parsing loop, 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
    }

dftg