PDA

Просмотр полной версии : [Info] Выражения и операторы PAWN.



Hidden
24.05.2014, 17:56
new var_1, var_2, result; // некоторые переменные



Арифметические выражения:
Пример
Пояснение


+
result = var_1 + var_2;
Результатом (result) будет сумма var_1 и var_2.


-
result = var_1 - var_2;

-var_1
Результатом (result) будет разность var_1 и var_2.


Отрицательное значение.


*
result = var_1 * var_2;
Результатом (result) будет произведение var_1 и var_2.


/
result = var_1 / var_2;
Результатом (result) будет частное var_1 и var_2.


%
result = var_1 % var_2;
Результатом будет остаток деления var_1 и var_2.


++
var_1++


++var_1
Прибавление единицы (1). Результатом будет значение var_1 перед прибавлением единицы (1).

Прибавление единицы (1). Результатом будет значение var_1 после прибавления единицы (1).


--
var_1--


--var_1
Уменьшение на единицу (1). Результатом будет значение var_1 перед уменьшением на единицу (1).

Уменьшение на единицу (1). Результатом будет значение var_1 после уменьшения на единицу (1).






Операторы присваивания:
Пример
Пояснение


+=
var_1 += var_2;
Прибавить к значению var_1 значение var_2.


-=
var_1 -= var_2;
Отнять от значения var_1 значение var_2.


*=
var_1 *= var_2;
Умножить значение var_1 на значение var_2.


/=
var_1 /= var_2;
Разделить значение var_1 на значение var_2.


%=
var_1 %= var_2;
Присвоить значению var_1 остаток от деления var на var_2.


&=
var_1 &= var_2;
Применяет побитовое "и" к var_1 и var_2 и присваивает результат к var_1.


|=
var_1 |= var_2;
Применяет побитовое "или" к var_1 и var_2 и присваивает результат к var_1.


^=
var_1 ^= var_2;
Применяет побитовое "исключающее или" к var_1 и var_2 и присваивает результат к var_1.


=
var_1 = var_2;
Присваивает значению var_1 значение var_2.






Операторы сравнения:
(обычно используются
с оператором if)
Пример
Пояснение


==
if(var_1 == var_2)
Если var_1 равно var_2.


!=
if(var_1 != var_2)
Если var_1 не равно var_2.


>
if(var_1 > var_2)
Если var_1 больше var_2.


<
if(var_1 < var_2)
Если var_1 меньше var_2.


>=
if(var_1 >= var_2)
Если var_1 больше либо равно var_2.


<=
if(var_1 <= var_2)
Если var_1 меньше либо равно var_2.






Логические операторы:
Пример
Пояснение


!
if(!IsPlayerConnected(playerid))
Логическое "НЕ" (если игрок не подключён).


||
if(var_1 == 0 || var_2 == 0)
Логическое "ИЛИ" (если var_1 равно нулю или var_2 равно нулю).


&&
if(var_1 == 0 && var_2 == 0)
Логическое "И" (если и var_1, и var_2 равны нулю).






Побитовые операторы:
Автор темы: Pop
ссылка (http://pro-pawn.ru/showthread.php?4511)






Операторы ветвления:
Пример
Пояснение


if

if(var_1 == 256) print("var_1 равно 256");
Если (if) var_1 равно 256, то в консоли выведет "var_1 равно 256".


else

if(var_1 == 256) print("var_1 равно 256");
else print("var_1 не равно 256");
Если (if) var_1 равно 256, то в консоли выведет "var_1 равно 256", а если иначе (else), то выведет "var_1 не равно 256".


else if

if(var_1 == 256) print("var_1 равно 256");
else if(var_1 == 255) print("var_1 равно 255");
else print("var_1 не равно ни 256, ни 255");
Если (if) var_1 равно 256, то в консоли выведет "var_1 равно 256", если же (else if) var_1 равно 255 - выведет "var_1 равно 255", а если иначе (else) - выведет "var_1 не равно ни 256, ни 255".






Оператор варианта:
Пример
Пояснение


switch

switch(var_1)
{
case 256: print("var_1 равно 256");
case 255: print("var_1 равно 255");
default: print("var_1 не равно ни 256, ни 255");
}
switch как бы перебирает все значения var_1. В случае, если var_1 = 256 (case 256), в консоли выведет "var_1 равно 256", если же var_1 равно 255 (case 255) - выведет "var_1 равно 255", а если иначе (default) - выведет "var_1 не равно ни 256, ни 255".


case

case 1..100: // Пример 1
case 1, 3, 55, 77: // Пример 2

#define SOME_TEXT 0 // Пример 3
switch(var_1)
{
case SOME_TEXT: print("var_1 равно нулю");
// равносильно:
// case 0: print("var_1 равно нулю");
}
Если рассмотреть отдельно case, то его можно использовать по-разному: можно просто число (пример выше), можно ряд чисел (Пример 1, от 1 до 100), можно несколько чисел (Пример 2). Также, можно задефайнить (#define*) значение и использовать задефайненный текст (Пример 3).
*#define - директива. Информация о директивах - click (http://pro-pawn.ru/showthread.php?8181).






Оператор sizeof:
Пример
Пояснение


sizeof

new array[25]; // создадим массив на 25 ячеек
printf("Размер массива array - %i.", sizeof(array));
// выведем сообщение в консоль
Данный оператор позволяет узнать размер переменных (в консоли выведет "Размер массива array - 25.").






Оператор циклов/функции,
связанные с циклами
Пример
Пояснение


for
(начальное действие; условие повторения; шаг цикла)

new i, array[5];
for(i = 0; i < sizeof(array); i++)
{
array[i] = 5;
}
Данный цикл содержит в себе счётчик, то есть цикл не остановится, пока переменная i меньше размера массива array, то бишь меньше 5 (в примере присваиваем переменным array[0], array[1], array[2], array[3] и array[4] значение 5).


while
(условие повторения)

new i = 2, array[5];
while(i < 5)
{
array[i] = 5;
i++;
}
Особенность цикла заключается в том, что он не будет работать, если условие повторения не выполняется, то есть значения переменной проверяются перед запуском цикла, отчего данный цикл называют циклом с предусловием (в примере присваиваем переменным array[2], array[3], array[4] значение 5).


do-while

new i = 2;
do
{
i++;
}
while(i < 10);
// пока i меньше 10, выполняем цикл ещё раз
Особенность цикла заключается в том, что он сначала выполняет действие, а потом проверяет соответствие условию, отчего данный цикл называют циклом с постусловием (в примере сначала прибавляем к i единицу, а потом проверяем, i меньше десяти или нет).


if-goto

new i = 8;
loop_start:
if (i < 10)
{
printf("Число: %i", i);
i++;
goto loop_start;
}
В этом цикле мы создаём переменную со значением 8 (new i = 8), присваиваем циклу loop_start проверку на значение i (if(i < 10)). Если значение истинно, то есть i действительно меньше 10, то выводим значение переменной i, прибавляем к этой переменной единицу и с помощью функции goto запускаем цикл снова (goto loop_start;), только теперь i будет равняться 9. И так далее.


break

new i;
for(i = 0; i < 10; i++)
{
if(i == 5) break;
}
break обрывает действие цикла. Цикл будет прибавлять к i единицу до того момента, когда i станет равной 5. Когда это произойдёт (if(i == 5)), цикл остановится (break;).


continue

new i;
for(i = 0; i < 10; i++)
{
if(i == 5) continue;
printf("%i", i);
}
continue пропускает действие цикла. Цикл будет выводить в консоль значения i, а когда i станет равной 5, цикл пропустит это действие, то есть число 5 в консоль не выведется.






Оператор возврата return:
Автор темы: DeimoS
ссылка (http://pro-pawn.ru/showthread.php?6662)






Тернарный оператор:
Пример
Пояснение


? :

new a = 20, b = 6, c;
c = (a > b) ? a : b;

// Пояснение на примере if/else:
new a = 20, b = 6, c;
if(a > b) c = a;
else c = b;
Тернарный оператор, по сути, то же самое, что и операторы ветвления (if/else), только в нём код записывается в одну строку.
Вид (если используются числа): условие ? выражение 1 : выражение 2
Вид (если используется текст): условие ? (текст 1) : (текст 2)






Прочее:
Пример
Пояснение


[ ]
new a[20];
a[5] = 2;
Индекс обычного массива (ячейки).


{ }
new a[20 char];
a{5} = 2;
Индекс сжатого массива (символы).




Использованы материалы из http://wiki.sa-mp.com/, PAWN_Language_Guide.pdf.

Salvacore
24.05.2014, 18:04
Отлично!

Just_Fenix
25.05.2014, 11:14
Хороший урок, молодец.

Daniel_Cortez
25.05.2014, 21:10
Убедительная просьба топикстартеру: когда оформляете тему, включайте хоть иногда темный стиль форума и убедитесь, что на нём всё видно.

Hidden
26.05.2014, 00:19
Убедительная просьба топикстартеру: когда оформляете тему, включайте хоть иногда темный стиль форума и убедитесь, что на нём всё видно.

Внёс соответствующие поправки. Спасибо.

DeimoS
26.05.2014, 00:21
Может лучше таблицы внести под спойлеры? И каждый спойлер подписать. Дабы не листать и не выискивать нужную таблицу среди всех

Maxim_Black
24.11.2014, 18:22
Отличный урок, молодец. Спасибо.

break обрывает действие цикла. Цикл будет прибавлять к i единицу то того момента, когда i станет равной 5. Когда это произойдёт (if(i == 5)), цикл остановится (break;).