Цикл
For...Next инициализируется
iterator to
startvalue,
затем выполняется
statement block, идет приращение
iterator
по
stepvalue до тех пор, пока он не превышает
endvalue.
Если
stepvalue не является явно заданным будет присвоено
1.
Значения
stepvalue и
endvalue хранятся
внутренне сразу же после выполнения
For и таким образом не
могут быть изменены в цикле
For. Операторы сравнения, такие
как < and > не будут эффективными, как и
stepvalue или
endvalue
потому что выражения не будут повторно проверяется во время цикла.
(Результаты выражений, используемых для их определения могут быть изменены,
но эти изменения не повлияют на выполнение цикла
For.)
Смотрите примеры.
Примечание: В некоторых диалектах, временные переменные
stepvalue
и
endvalue выходят из области видимости в конце цикла, и их
значения не гарантированно остаются неизменными, как только любой код после
цикла был выполнен. По этой причине, рекомендуется никогда не прыгать из
цикла
For...Next (используя
Goto
или подобный), а затем переходить обратно в его середину позже,
в диалектах
-lang fb или
-lang deprecated.
Итератор должен быть неотъемлемым скаляром: только
Static/
Shared
переменные и локальные переменные могут быть использованы; не может
использоваться никакой другой тип, включая элементы массива,
UDT элементы,
ByRef
параметры или любого рода разыменованный адрес.
iterator может быть определен в той же области видимости,
что и
For , используя синтаксис
As datatype.
С помощью этого синтаксиса,
iterator создается и
уничтожается в течение области видимости
For...Next.
Смотрите диалектные различия ниже.
Если
endvalue меньше
startvalue , то
отрицательный
stepvalue должен быть указан или
statement block
не будет выполняться правильно, начиная со
startvalue
сравнивается на предмет больше, чем
endvalue.
For заявление вызывает выполнение операторов в
statement block
пока
iterator больше, чем endvalue
(или
меньше чем endvalue если
stepvalue < 0).
iterator
будет увеличиваться на количество
stepvalue после каждого
выполнения
statement block. Если не задано приращение,
iterator
будет неявно увеличивается на
1.
Если заявление
Exit For
встречается внутри
statement block, цикл завершается, и
выполнение возобновляется сразу же после его заявления
Next.
Если заявление
Continue For
встречается, остальные части
statement block пропускаются до
тех пор, пока соответствующий
Next в блоке не встретится.
Значение счетчика увеличивается, и цикл перезагружается, если это все еще в
пределах предоставленного
endvalue.
Примечание: для типов данных
Integer,
не возможно, чтобы цикл дошел до максимально возможного значения (или до
минимально возможного значения), которое может храниться в переменной типа,
поскольку цикл нарушается только тогда, когда инкрементированнная переменная
превышает
endvalue. Например если вы попытаетесь сделать
итерацию переменной от 0 до 255, цикл будет прерван после того, как
переменная достигнет 256 или более. Использование переменной
UByte
для счетчика не будет работать, потому что хотя он может содержать числа от
0 до 255, он не может вместить 256. Смотрите
TblVarTypes
чтобы найти верхний и нижний пределы для стандартных типов данных.
Как и все операторы управления потоком,
For может быть
вложенным, то есть, он может использоваться в блоке оператора другого
For.
For,
Next, и
Step - это
операторы, которые могут быть перегружены внутри определяемых пользователем
типов. См.
Оператор For,
Оператор Next,
Оператор Step
См. также