Всем привет, с вами gegelo. В данной теме представлена информация для новичков.
Что такое PAWN?
Pawn - бестиповый процедурно-ориентированный встраиваемый скриптовый язык программирования с C-подобным синтаксисом. Компилятор (Pawno) генерирует P-код (байт-код), который запускается в виртуальных машинах, которых 17 штук (1 под GM, 16 под FS.)
Особенности языка:
- Возможность подключения модульных инклудов. Можно организовать аккуратную структуру исходного кода.
- Pawn скрипты выполняются в одном потоке.
- Код полностью состоит из одиночных, нет вложенных друг в друга функций. Функции могут быть доступными только в пределах скрипта или публичными (которые могут использоваться виртуальной машиной).
- Все переменные хранятся либо в секции данных, либо в стеке.
Переменные:
Переменные – это ячейки памяти для хранения данных. В Pawn существует несколько типов переменных:
- Целочисленные
- Вещественные
- Логические
Переменная целочисленного типа объявляется следующим образом:
Мы объявили переменную, у неё нет никакого значения - она является не инициализированной. Давайте инициализируем данную переменную, то есть присвоим ей значение:
Переменная вещественного типа объявляется следующим образом:
Она хранит в себе только десятичные числа. Объявляется она так же, как и переменная целочисленного типа, только перед именем переменной пишется приставка "Float:".
Переменная логического типа:
Она хранит в себе 2 значения. true - истина, false - ложь. Как и в переменной вещественного типа, перед именем должна быть приставка "bool:".
Ещё переменные могут быть локального и глобального типа.
Глобальные переменные - переменные к которым можно обратиться из любой части кода.
Локальные переменные - переменные, которые находятся внутри тела какой-либо функции, и доступны только внутри данной функции.
в Pawn есть уже зарезервированные ключевые слова, которые нельзя использовать в качестве имён:
assert break case char
const continue default defined
do else enum exit
for forward goto if
native new operator public
return sizeof sleep state
static stock switch tagof
while
Операторы:
Тема: Операторы PAWN. Автор: Amfy
Тема: Тернарный оператор Автор: Amfy
Тема: Операторы Break и Continue Автор: Neat
Тема: Циклы, переключатель (switch), break, continue Автор: Compan
Оператор sizeof:
sizeof - оператор, использующийся для получения размера переменных
Основной плюс использования оператора sizeof - простота изменения кода. Представьте себе ситуацию, когда в вашем коде более 28 тысяч строк и вам нужно изменить в нём размер одного из массивов - тогда вам придётся перерывать весь код, чтобы изменить конечные значения в циклах, в которых обрабатывается данный массив, в ветвлениях (if/case) и т.д.
Всего этого можно избежать, используя оператор sizeof: компилятор Pawn сам возьмёт на себя рутинную работу по расчёту размера массивов. © Daniel_Cortez.
Оператор Switch:
Оператор switch используется в Pawn для выполнения действий по нескольким (чаще всего 2 и более) ветвям.
Действия в метке default выполняются в том случае, когда значение выражения в switch не принадлежит ни одному из интервалов. Метка default не обязательна.
Главное преимущество switch перед if - эффективность: если в конструкции switch указано несколько диапазонов, принадлежность к одному из них определяется быстрее, чем в if.
Директивы:
Тема: Директивы Автор: Neat
Массивы:
Массив — упорядоченный набор данных, для хранения данных одного типа, идентифицируемых с помощью одного или нескольких индексов. В простейшем случае массив имеет постоянную длину и хранит единицы данных одного и того же типа.
Массивы так же, как и переменные бывают нескольких видов - одномерные, двумерные и трёхмерные. И нескольких типов - вещественные и целочисленные.
Выше мы создали инициализированный массив из 3 ячеек. Обращаемся к ним по индексам ячеек: 0,1,2
Массив вещественного типа:
Так же как и с переменными вещественного типа, перед именем пишется приставка "Float:". Ссылаемся и изменяем значение так же, как и с целочисленным типом.
Одномерные массивы ещё используют для всех игроков. Создавая большой массив, который равен максимальному кол-ву игроков на сервере. В Pawn есть встроенная константа MAX_PLAYERS, равная 1000 игрокам.
Двумерный массив:
Массив Enum:
Массив Enum - это массив переменных.
Для обращения к массиву, мы должны сделать к нему "ссылку", создав одномерную переменную. Так мы создаём массив для всех игроков. Чтобы сделать enum индивидуально для каждого игрока - нам нужен двумерная переменная.
Константы:
Константа - величина, не меняющаяся в процессе выполнения скрипта. В Pawn константы объявляются почти так же, как и переменные, однако каждое объявление начинается со слова const:
В константах нужно обязательно указывать значение.
Строки:
Строка - это последовательность символов.
По сути строки - это те же массивы. А поскольку символы в Pawn могут храниться (!) в целочисленных переменных, то строка - это массив целых чисел.
Инициализация строки (задание ей начального значения) обычно выполняется после её объявления:
Рассмотрим внутреннее представление строки:

Обратите внимание на последний символ '\0' - это завершающий нуль-символ, обозначающий конец строки. По этому символу функция printf (и многие другие функции) определяет, на какой позиции закончить вывод символов на экран.
А теперь давайте рассмотрим строку, как массив целых чисел (коим она в Pawn и является):

Каждому символу строки соответствует свой номер (код), при этом последний элемент равен нулю - это и есть завершающий нуль-символ.
Кроме нуль-символа в Pawn есть и другие специальные символы:
Строкам, в которых меньше позиций, нельзя присваивать значения строк, в которых больше позиций. Впрочем, это ограничение можно обойти при помощи функции strcat:
Данная функция "прицепляет" к концу 1-й строки значение 2-й строки. С помощью неё можно безопасно скопировать значение из исходной строки в целевую, указав размер 1-й строки. При этом последний параметр (размер) - необязательный, т.е. его можно не указывать.
Функции:
Функция - обособленная последовательность действий, возвращающая определённое число значений в место вызова.
Синтаксис:
Любой код на Pawn состоит из функций. Это помогает избежать больших размеров кода, упростить структуру кода.
Функция складывает 2 числа, полученных на входе, и возвращает результат на место вызова при помощи ключевого слова return.
Данная функция выводит на экран "Hi!" и не возвращает никаких значений, т.к. в конце функции нет ключевого слова return.
Внимание! Функция main является главной функцией в любом скрипте, т.к. с неё начинается выполнение кода любого скрипта.
Теперь перейдём от объявления функций к их использованию. Попробуем использовать описанную выше функцию sum из функции main для сложения двух чисел:
Как и говорилось выше, функция main всегда самая главная, а потому выполнение кода начнётся именно с неё. Переменной result будет присвоено значение, которая вернёт функция sum, сложив числа x и y. Однако можно обойтись и без записи результата во временную переменную result, подставив вызов функции sum внутрь вызова функции printf, тогда значение, которое вернёт sum, тут же будет выведено на экран.
Таким образом, на экран будет выведено:
На этом пока что всё. Материал будет дополняться, успехов.
Вы тоже можете дополнять данный материал.


Тема закрыта
Сообщений: 182
Регистрация:
Skype: bens13371