В этой статье мы рассмотрим работу цикла do... while.
Цикл do... while можно выполнять двумя способами: с предпроверкой условия, и постпроверкой условия.
Синтаксис цикла с предпроверкой условия означает, что действие выполняется только тогда, когда выполняется условие.
:local a 1; while ($a!=10) do={:set a (a+1); };
($a!=10) – проверка условия: переменная а не должна быть равна 10. Если а не равно 10, то выполняется действие :set a (a+1);.
Синтаксис цикла с постпроверкой условия предполагает, что вначале выполняется какое-то действие, также :set a (a+1); и только потом проверяется условие.
:local a 1; :do {:set a (a+1); } while=($a!=10);
Несмотря на различия в этих двух примерах, результатом их работы будет переменная а, равная 10.
А если, например, условие изменится? Допустим, исходное значение переменной а будет равно десяти.
В этом случае цикл с предпроверкой выполнит проверку условия, определит, что а уже равна 10, и завершит свою работу, не выполнив действия.
:local a 10; while ($a!=10) do={:set a (a+1); :put $a;};
Рис.1. Mikrotik Routerboard. Цикл do... while, предпроверка условия.
Цикл с постпроверкой вначале выполнит действие, увеличив переменной а на единицу. В результате переменная а станет равной 11. Вследствие этого условие окажется невыполнимым и мы получим бесконечный цикл.
:local a 10; :do {:set a (a+1); :put $a;} while=($a!=10);
Рис.2. Mikrotik Routerboard. Цикл do... while, постпроверка условия.
Бесконечный цикл можно получить, указав в качестве условия true.
while (true) do={:put "work"; delay 2};
Рис.3. Mikrotik Routerboard. do... while бесконечный цикл.
delay 2 – выполняет приостановку скрипта. Значение 2 указывает время приостановки в секундах.
Евгений Рудченко специально для ASP24.



