Меню
Контакты
107023, Москва, пл. Журавлёва, 10с3, подъезд 31, офис 309
Пн-Пт: с 9-00 до 17-00   Сб-вс: выходной
Интернет-магазин
сетевого оборудования
Москва +7 (495) 103-41-03 +7 (915) 420-28-94
107023, Москва, пл. Журавлёва, 10с3, подъезд 31, офис 309
Пн-Пт: с 9-00 до 17-00   Сб-вс: выходной
Заказать звонок

Рассмотрим работу цикла do..while

 24 Фев 2012    MikroTik, Практика и программирование MikroTik

В этой статье мы рассмотрим работу цикла 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;};

 

Mikrotik Routerboard. Цикл do while, предпроверка условия

Рис.1. Mikrotik Routerboard. Цикл do... while, предпроверка условия.

 

Цикл с постпроверкой вначале выполнит действие, увеличив переменной а на единицу. В результате переменная а станет равной 11. Вследствие этого условие окажется невыполнимым и мы получим бесконечный цикл.

:local a 10; :do {:set a (a+1); :put $a;} while=($a!=10);

 

Mikrotik Routerboard. Цикл do while, постпроверка условия

Рис.2. Mikrotik Routerboard. Цикл do... while, постпроверка условия.

 

Бесконечный цикл можно получить, указав в качестве условия true.

while (true) do={:put "work"; delay 2};

 

Mikrotik Routerboard. do while бесконечный цикл

Рис.3. Mikrotik Routerboard. do... while бесконечный цикл.

 

delay 2 – выполняет приостановку скрипта. Значение 2 указывает время приостановки в секундах.

 

Евгений Рудченко специально для ASP24.