Циклы

И вот мы снова выходим из здания суда…

Иногда возникает ситуация, когда нужно выполнять какие-то строчки кода большое количество раз, чтобы не прописывать это самостоятельно, в языках программирования для этого используются циклы. Циклы существуют даже в языках близким к машинному коду, например в 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

ГЛОССАРИЙ Цикл — любая многократно исполняемая последовательность операций, организованная любым способом. Итерация в цикле — один шаг итерационного, циклического процесса. Тело цикла - это набор действий (операций), которые подразумеваются к повторению раз за разом при работе цикла