Циклы
Иногда возникает ситуация, когда нужно выполнять какие-то строчки кода большое количество раз, чтобы не прописывать это самостоятельно, в языках программирования для этого используются циклы. Циклы существуют даже в языках близким к машинному коду, например в Assembler, в скрипте же есть две конструкции:
while %Условие%:
#ваш код
и
loop (%number% times|%objects%):
#ваш код
Рассмотрим первую конструкцию, в дословном переводе это цикл ‘пока’ или ‘до тех пор’, то есть он будет повторяться столько раз, пока условие внутри него не станет верным, например:
set {_a} to 0
while {_a} is less than 5:
add 1 to {_a}
Данный цикл повторится 5 раз, так как условие - пока {_a} меньше чем 5, а тело цикла - добавить к {_a} единицу Под ‘телом цикла’ подразумевается весь код который находится в этом блоке. Также , достаточно важный термин - итерация цикла Итерация - это ровно 1 повтор какого-либо цикла, далее будем использовать именно этот термин Теперь перейдем к циклу loop, это эдакий скриптовый аналог цикла for из других языков программирования. Чтобы не заходить в тему, которою мы еще не затрагивали, рассмотрим лишь первый вариант этого цикла:
loop %number% times:
Где, %number% - это количество повторений, причем если вы передадите туда переменную, а внутри цикла измените ее значение, цикл будет повторяться столько раз, сколько было указано в значении переменной при его старте. Например:
set {_a} to 0
loop 5 times:
add 1 to {_a}
По окончанию цикла в переменной {_a} будет число 5
set {_b} to 5
loop {_b} times:
add 1 to {_b}
По окончанию цикла в переменной {_b} будет значение 10 Думаю тут все предельно ясно, но теперь к тонкостям: Внутри цикла мы можем использовать новые (для нас) выражения:
stop loop
exit %number% loop
continue
Первое выражение завершает самый последний цикл (если есть вложенные циклы внутри другого цикла):
set {_a} to 0
while true is true:
add 1 to {_a}
if {_a} is greater than 5:
stop loop
Цикл завершится когда {_a} станет больше чем 5 Второе же наоборот направлено на работу со вложенными циклами, где можно завершить все циклы сразу, просто указав их количество в %number%
Например:
set {_a} to 0
set {_b} to 2
while true is true:
add 1 to {_a}
while true is true:
add {_a} to {_b}
if {_b} is greater than 20:
exit 2 loop
Циклы завершатся когда {_b} станет больше 20 Третье выражение позволяет нам пропустить текущую итерацию, без остановки всего цикла
Например:
set {_a} to 0
loop 5 times:
if {_a} is 3:
continue
else:
broadcast "%{_a}%"
add 1 to {_a}
В чат будет выведено:
1
2
3
3
3
Если же мы бы поставили stop loop, цикл бы завершился как только {_a} стало бы равно трем.
У цикла loop тоже есть особенные выражения - loop-value Используя это выражение мы получаем значение текущей итерации, пример:
loop 3 times:
broadcast "%loop-value%"
В чат будет напечатано:
1
2
3
ГЛОССАРИЙ Цикл — любая многократно исполняемая последовательность операций, организованная любым способом. Итерация в цикле — один шаг итерационного, циклического процесса. Тело цикла - это набор действий (операций), которые подразумеваются к повторению раз за разом при работе цикла