Pawn. Подробнее о переменных и массивах
Переменная в Pawn (как и в большинстве языков) - это поименованная, либо адресуемая область памяти, имя или адрес которой можно использовать для осуществления доступа к данным, находящимся в переменной или по данному адресу.
Если заглянуть "под капот" Pawn, то мы увидим, что на самом деле в этом языке отсутствует типизация. В действительности каждая переменная является одной четырёхбайтовой ячейкой. Но, для простоты повествования, опустим подробности и будем считать, что в Pawn для переменных отведено несколько типов.
Переменные бывают нескольких типов: целые(Integer), дробные(Float), строковые(Char).
Они создаются следующим образом:
new x; // переменная типа Integer(целое число)
new Float:x; // переменная типа Float(число с плавающей запятой, проще - дробное)
new x[12]; // переменный массив типа char(в каждой ячейке массива один символ)
И эта статья о том, как работать с каждым типом.
Integer - целый🔗︎
new x; // создаем целую переменную x, по умолчанию x равен нулю.
x = 5; // присваиваем переменной x значение 5.
new x, y, z; // создаем 3 целых переменных
x = 5;
y = 7;
z = x + y; // после выполнения программы z будет равен 12
Есть специальные операторы, для работы с целыми числами, рассмотрим основные:
new x = 5, y = 8;
x += y; // присвоим переменной x значение x + y
// эту строку можно было записать и так: x = x + y;
// существуют аналогичные операторы например: -=,+=,*= и др.
// результат программы будет 13
x++; // прибавляем к x один, это можно записать так: x += 1; или так: x = x + 1;
// существуют аналогичный оператор: --
Float - дробный🔗︎
Всё также как и в работе с целыми числами, только создание переменной сопровождается указателем Float, а присваиваемое значение должно быть дробное.
new Float:x = 1.0, Float:y = 1.1;
x += y; // результат: 2.1
Char - символьный🔗︎
new x[10]; // создаем массив в 10 ячеек.
x = "Петя";
print(x); // в консоль выведется Петя.
// в этой строке можно выдернуть любой символ:)
printf("%c", x[1]); // выведет 'е'
Существует множество функций для работ с числами и строками, их можно узнать на вики проекта са-мп.
Массивы🔗︎
Создать числовой массив очень просто:
new x[10]; // мы создали массив в 10 ячеек, от нулевой до девятой
// присваиваем элементам с номерами 0 и 1 значения 5 и 8 соответственно
x[0] = 5;
x[1] = 8;
x[3] = x[0] + x[1]; // в x[3] будет находится 13
Числа в массивы можно внести при инициализации оного:
new x[5] = {5, 3, 4, 7, 94};
// тогда при выполнении
x[0] += x[1] + x[3];
// x[0] будет равен 15
Каждая ячейка такого массива имеет размер 4 байта, иногда это не нужно поэтому применяется следующее:
new x[5 char]; // теперь 1 ячейка имеет размер 1 байт
// в 1 ячейку вместится число от 0 до 255.
Работать с подобными массивами можно так:
// числа
new x[5 char];
x{0} = 4;
x{2} = 3;
x{1} = x{0} + x{1};
printf("%d", x{0});
// строки
new y[5 char]; // выделим 5 байт на строку (4 символа + 1 завершающий)
y = !"test"; // в такие переменные строки нужно записывать в упакованном виде, это делается с помощью знака восклицания
// и когда нам понадобится значение переменной, мы должны распаковать строку
new string[5]; // создадим обычный массив на 5 ячеек
strunpack(string, y); // распакуем в него запакованную строку
printf("%s", string);
Запаковка строк очень полезна тогда, когда нужно хранить большое количество данных в одном массиве, например для хранения названий транспорта.
Многомерные массивы🔗︎
Существуют двухмерные, трехмерные и четырёхмерные массивы, создать их можно так:
new x[2][3] = {
{5, 7, 2},
{2, 5, 9}
}; // мы создали двухмерный массив и сразу в него вбили числа
// x[0][1] равен 7
// x[1][0] равен 2
Иногда требуется использовать конструктор enum для большего удобства:
enum test {
param1,
param2,
param3
}
new x[2][test];
// таким образом к массиву можно обращаться более человечно
x[0][param1] = 1;
Это очень удобно, если у вас в массиве находятся данные разных типов, пример:
enum food {
pos,
Float:cost,
bool:enabled,
name[32]
}
new x[2][food] = {
{5, 342.5435, false, "Колбаска"},
{87, 3.122, true, "Пончик"}
};
// x[0][name] - выведет 'Колбаска'