Приветствую Вас Гость | RSS

Все для SA-MP

Воскресенье, 29.06.2025, 20:36
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Операторы
Подполковник

massa Администраторы

Сообщения:
145
Симпатия:
1
Операторы — это команды языка программирования, которые выполняют последовательность инструкций.

Операторы присваивания:
Все операторы присваивания идентичны с операторами присваивания языка 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. Однако, тесты показали следующее:

Оператор 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;
Code
for(new x=0;x<10;x++)
{
   if(x == 5) continue;
   if(x == 8) break;
   printf("%d",x);
   // результат: 0,1,2,3,4,6,7
}

Важное замечание:
Все условия, циклы могут быть двойные, тройные и т.д.
Пример:
Code
new x=45,y=1;
if(x == 45)
{
   if(y == 1)
   {
    if(x-1 == 45-1)
    {
     print("Ура");//выведется в консоль
    }
   }
}

Code
for(new i=0;i<10;i++)
{
   for(new j=0;j<5;j++)
   {
    printf("[%d][%d]",i,j);
   }
}

Автор статьи: ZiGGi


ТРЕБУЮТСЯ МОДЕРАТОРЫ НА ФОРУМ!

 
  • Страница 1 из 1
  • 1
Поиск: