Циклы
Итак, цикл - повторение действий. Давайте посмотрим пример:
For each (Integer A) from 1 to 10, do (Actions)
Loop - Actions
Set i = (i + 1)
Смотрим на первую строчку: For each (Integer A) from 1 to 10, do....
Это - "заголовок" цикла, в котором назначается сколько раз будет выполнено
действие. Integer A значит, что как "счетчик" цикла будет использована
переменная A (в данном случае она автоматически создается и убирается
после выполнения цикла). При выполнения действия в счетчике будет находится
номер итерации (т. е. выполнения) цикла. Так, при первом выполнении там будет
один, при втором - два, третьем - три и так далее. Вторую строчку можно
пропустить, она будет в любом цикле. Смотрим третью: Set i = (i + 1). Это
- действие, которое и будет выполнено множество раз. Оно не ограничивается одной
строчкой - можно поставить сколько угодно действий.
Теперь можно сказать что же этот цикл делает: присваивает переменной
i значение i + 1 десять раз. После выполнения цикла в переменной
i будет значение 10 (в том случае, если начальное значение было
0). Грубо говоря, цикл выполняет операцию i +
10.[field=Примечание]Важно понимать, что A - тоже переменная, и
читать / записывать значение из неё / в неё можно откуда угодно. Так, можно
получить её значение даже вне цикла, хотя это не имеет смысла. Но такая
"возможность" может вызвать один серьезый глюк: если запустить два цикла, и оба
работающие с переменной A, они обе будут пытаться изменять значение
A. Скорее всего, это закончится тем, что циклы (оба) будут выполнены
неправильно: действие будет выполнено несколько лишних раз либо наоборот - будет
выполнено меньше раз, чем требуется. Поэтому, в триггерах есть возможность
использовать другие переменные, не только A (также существует переменная
B, но если нам надо сразу 3 цикла запустить?). Когда Вы создаете действие
цикла (имеется в виду действия создания цикла, а не действия в цикле) у Вас есть
выбор: "For Each A...", "For Each B...", "For Each
Variable...". Второе - тоже самое, что первое (какая разница: A или
B? хотя если у вас больше чем два цикла одновременно не будет -
рекомендую, потому что тогда не нужно создавать еще одну переменную). А вот
используя третье Вы можете назначить, какую именно переменную надо использовать
как счетчик (тип переменной - обязательно integer).
В том же меню Вы найдете еще два типа действий цикла: "... Do Multiple
Actions" и, соответственно, без такой надписи ("просто" цикл). Как видно из
названий, один цикл дает возможность сделать несколько действий в триггере, а
другой - нет. Никакой разницы нет, что использовать первый, что
второй.
Давайте рассмотрим еще один пример. Помните, нам надо было в переменную
i занести значение 1 + 2 + 3 + 4 + 5 ... + 10?
For each (Integer A) from 1 to 10, do (Actions)
Loop - Actions
Set i = (i + (Integer A))
В итоге в переменную i будет внесено как раз нужное значение. Судите
сами - переменной i каждый раз прибавляется значение, которое само по
себе меняется (номер итерации цикла). Таким образом, сначала будет Set i = (i
+ 1), затем Set i = (i + 2) и так далее.