Что такое циклы.
Если по простому, то это регулярно повторяющиеся события.
Например Недельный цикл.
В каждой недели 7 дней которые повторяются из недели в неделю.
В PAWN`e практически все тоже самое, главное разобраться как работает каждый из циклов.
Цикл - это выполнение одного и того же кода определенное количество раз.
Зачем нужны циклы.
- Они необходимы когда появляется Необходимость выполнить функцию для каждого игрока непосредственно в данный момент.
- Выполнить какой то код необходимое количество раз - например составление топ 15 (он же составляется построчно).
Какие бывают циклы.
В Pawn циклы бывают трех видов:
- For - Цикл со счетчиком. Необходимо использовать когда мы знаем количество итераций цикла ( итерация - повторное выполнение функции)
- While - Цикл с предусловием. Будет выполняться пока условие верно
- do while - Цикл с постусловием. Будет выполниться первый раз и проверит условие и если оно верно выполниться снова и так дока условие будет верно
Синтаксис и примеры циклов.
Синтаксис цикла for следующий
for(оператор_инициализация; условие; поститерационная_команда ) Х //Тело цикла }Как он работает: Перед первой итерацией ( проходом ) выполняется оператор инициализации, обычно это инициализация счетчика цикла. Затем проверка условия, и если оно истинно ( к пример 1=1), то выполняется тело цикла, а после того как оно выполнено - поститерационная команда. Вот как это работает наглядно:
for( new i = 1; i <= 10; i++) {
server_print("For: %d",i)
}
- new i = 1 - объявили новую переменную и сказали что она равно единице
- i <= 10 - Объявили условие что цикл должен выполниться если i меньше или равна дести.
- Далее начинается работа цикла он проверяет это условие и так как i равна 1 то выполняется тело цикла которое заключено в фигурные скобки { server_print("For : %d",i) }
- После того как тело выполнено, наступает очередь поститерационной команды i++, в ней мы к i добавляем 1, то есть i у нас теперь становиться равной 2.
- Так как цикл не закончил свою работу, он заново проверяет условие i<=10 у нас i равно теперь двум это тоже подходит под условие и все идет далее по кругу, до того момента пока i не станет равно 11 и условие i <=10 будет не верно, ( 11 <= 10 это же не правильно ) и цикл прекратит свою работу.
For:1
For:2
For:..
For:10
For:2
For:..
For:10
Синтаксис цикла while.
Цикл while называют цклом с предусловием потому что сначала проверяется условие, и если оно верно, то выполняется тело цикла.
while(условие){
//Тело цикла
}
Как он работает, тут все проще:
new i = 1
while( i <= 10){
server_print("For: %d",i)
i++
}
Результат будет точно такой же как и от прошлого цикла, но принцип работы разный:
- new i = 1 Вне цикла объявлена переменная и присвоено значение
- while( i <= 10) проверка условия цикла: если i ( мы же помним что оно равно 1) меньше или равна 10,условие верно по этому выполняется тело цикла. (следующий пункт)
{
server_print("For: %d",i)
i++
}
в теле которого мы к переменной i прибавляем по единице при каждом проходе цикла.- После того как прохождение по телу цикла закончено, процесс возвращается к проверке условия и если оно верно повториться.
И так будет продолжаться пока условие будет верно, как условие станет не верным, цикл прекратиться. - Что-бы пропустить елемент используется continue;:
while(i<=10){
i++;
if( i % 2)
continue;
server_print("%d парное!",i);
}
В данном примере цикл пропустит все варианты где i парное число. - Что-бы прекратить цикл используют break;
while(i < 4){
server_print("[%d]",i);
i++;
break;
}
В данном примере цикл начнет выполнятся и прервется как только дойдет до оператора break
Данный цикл лично я использую для работы с результатами запросов к базе данных и в некоторых других случаях.
И последний цикл do-while.
Как вы уже наверное догадались, это практически такой же цикл как и while, но с одним серьезным отличием, в данном цикле тело цикла выполниться хотя бы 1 раз, так как проверка условия происходит не до, а после итерации.
Синтаксис:
do
{
// тело цикла
}
while( условие )
Небольшой примерчик:
new i = 1
do
{
server_print("For: %d",i)
i++
}
while( i <= 10 )
Думаю вы и сами догадались как работает данный цикл и что результат будет опять таким же как и в прошлых циклах.
Но если мы изменим условие во всех циклах на заведомо не верное, то в этом цикле в отличие от остальных пройдет одна итерация.
Данный цикл крайне редко встречается в плагинах, по этому не имеет смысла на нем заострять внимание.
Задачка для самоконтроля и закрепления материала:
Напишите цикл в котором будет проверяться каждый игрок, живой он или нет.