Операторы — это команды языка программирования, которые выполняют последовательность инструкций.
Операторы присваивания: Все операторы присваивания идентичны с операторами присваивания языка C.
Code
x = a; // присвоит переменной x значение переменной a x = a + b; // присвоит переменной x сумму значений переменных a и b x = a - b; // присвоит переменной x разность значений переменных a и b x = a * b; // присвоит переменной x произведение значений переменных a и b x = a / b; // присвоит переменной x деление значений переменных a на b x = a % b; // присвоит переменной x остаток от деления значения переменной a на b
Все эти операторы имеют сокращённый синтаксис(этот синтаксис транслируется на уровне компиляции и на скорость выполнения кода никак не влияет), выглядит он следующим образом:
Code
x += a; // присвоит переменной x сумму значений переменных x и a, идентично x = x + a x -= a; // присвоит переменной x разность значений переменных x и a, идентично x = x - a
и так далее.
Операторы инкримента/декремента Оператор инкримента(++) увеличивает его операнд(переменную, к которой он применён) на единицу, а оператор декремента(—) уменьшает его операнд(переменную, к которой он применён) на единицу. Эти операторы могут быть применены двумя способами: 1. Префиксный 2. Постфиксный В случае префиксного способа, комбинация инкримента и операнда будет возвращать значение до увеличения или уменьшения. В случае постфиксного способа, всё будет в точности наоборот. Пример:
Code
x++; // (можно и так: ++x;)увеличим значение переменной x на 1, идентично x = x + 1 x--; // (можно и так: --x;)уменьшим значение переменной x на 1, идентично x = x - 1 x = y++; // присвоит переменной x значение переменной y, затем увеличит значение переменной y на 1. x = --y; // уменьшит значение переменной y на 1, затем присвоит переменной x значение переменной y(уже уменьшенное).
Оператор выражения: В языке Pawn операторы выражения сходны с языком C && — И || — ИЛИ ! — НЕ
Оператор if/else: if — при дословном переводе означает ‘если’ else — иначе Для сравнения используются следующие знаки: > — больше < — меньше >= — больше либо равно <= — меньше либо равно == — равно != — не равно
Пример:
Code
new x=5,y=8; if(x > 5) // дословно: если x больше 5, то { print("x > 5"); } else // иначе, т.е. если x меньше либо равен 5, то { print("x <= 5"); } // результатом выполнения будет: x <= 5
Теперь сделаем условие по сложнее, с использованием операторов выражения:
Code
new x=5,y=8,z=5; if( (x >= 5) && !(z == y) ) // дословно: если x больше 5 и z не равен y, то // это условие можно записать и так: if(x >= 5 && z != y) { print("x >= 5"); } else { print("x <= 5"); }
Code
new x=5,y=8,z=5; if(x >= 5 && z == y) // дословно: если x больше 5 и z равен y, то { print("x >= 5"); } else if(y >= 8) // иначе, если y больше либо равен 8 { print("y <= 8"); }
Примечание:
Операторы if/else имеют сокращённый синтаксис, который абсолютно идентичен языку C. Выглядит он следующим образом:
Code
new x, y = 5; x = (y > 5) ? 2 : 6; // в результате x будет равен 6.
Можно использовать например и так:
Code
new x = 2, y = 5; printf("%d", (y > 5 || x == 2) ? x : y); // в результате выведет 2.
Оператор switch/case: switch/case используется для создания более удобных конструкций и быстрого выполнения условия(в некоторых случаях).
Code
new x=random(10); // переменной x присваиваем рандомное значение от 0 до 9 switch(x) { case 0: print("x равно 0"); case 1,2: print("x равно 1 или 2"); case 3..5: print("x в диапазоне от 3 до 5"); case 4..8,196: print("x в диапазоне от 4 до 8 или 196"); default: // любое значение, не вошедшее в верхние, в данном случае это 9 { printf("x равен %d",x); } }
Code
new x[1]; x[0] = 'z'; switch(x[0]) { case 'a': print("в x[0] символ a"); case 'a','z': print("в x[0] символ a или z"); case 'a'..'z': print("x[0] символы в диапазоне от a до z"); case 'a'..'z','A'..'Z','@': { print("x[0] символы в диапазоне от a до z или от A до Z или символ @"); } }
Это очень удобно, код становится более наглядным, сравните сами:
Code
new x=random(10); if(x == 1) print("Ура, один"); else if(x == 2 || x == 3) print("Ура, два или три"); else if(x >= 4 && x <= 9) print("Ура, от четырех до девяти включительно"); else print("Ура, нуль");
Верхний код можно заменить так:
Code
new x=random(10); switch(x) { case 1: print("Ура, один"); case 2,3: print("Ура, два или три"); case 4..9: print("Ура, от четырех до девяти включительно"); default: print("Ура, нуль"); }
Важно! Стоить отметить, что в официальной документации к языку написано: ‘In pawn, switch is a structured “if”‘, а это значит, что конструкция switch — это набор структурированных if’ов, отсюда следует, что switch не может работать быстрее if. Однако, тесты показали следующее:
Следующая конструкция:
Code
switch(var) { case 40,80,150,160,230,420: return 1; }
быстрее, чем
Code
if ( var == 40 || var == 80 || var == 150 || var == 160 || var == 230 || var == 420 ) return 1;
Следующая конструкция:
Code
switch(var) { case 40..80,150..160,230..420: return 1; }
медленнее чем
Code
if ( var >= 40 && var <= 80 || var >= 150 && var <= 160 || var >= 230 && var <= 420 ) return 1;
Следующая конструкция:
Code
switch(var) { case 40: return 1; }
одинакова как и
Code
if ( var == 40 ) return 1;
Следующая конструкция:
Code
switch(var) { case 40..50: return 1; }
быстрее чем
Code
if ( var >= 40 && var <= 50 ) return 1;
Как видим — switch/case медленнее(значительно) if только на больших промежутках значений.
Оператор while и do/while: while и do/while это циклические операторы. Различия между while и do/while лишь в том, что do/while гарантированно выполнится один раз.
Code
new x=random(10); while(x != random(10)) // пока x не равен random(10) повторяй { print("x != random(10)"); }
Code
new x; do // делай { print("x != random(10)"); } while (x != random(10)); // пока x не равен random(10)
Условия могут быть такие же как и в if
Оператор for: for имеет вид: for(действия, которые выполнятся 1 раз ; условие при котором выполняется цикл (выполняется после каждой интерации) ; какие действия будут произведены после завершения интерации)
Code
new x; for(x=0;x<5;x++)// выполнится 5 раз(от 0 до 4), // после каждой интерации к x прибавляет 1 { printf("x = %d",x); }
Code
for(new x=5;x<=8;x += 2)// выполнится 2 раза(5 потом 7) // после каждой интерации к x прибавляет 2 { printf("x = %d",x); }
Если не задавать условие выполнения, то цикл будет бесконечным
Code
for(new x=5; ;x += 2) { printf("x = %d",x); }
Циклы можно прервать оператором break; или пропустить интерацию, с помощью continue;