Len1n |
Дата: Среда, 08.07.2015, 14:58 | Сообщение # 1
|
Боец
Сообщений: 89
Статус: Offline
|
Подобно огромному количеству ЯП, в Pawn имеются Include's, Define's, Functions. Начнем с Include'ов. Используется Include для фрагментации кода в различных ЯП. А именно для видимого разделения на куски. Разные программисты по разному оценивают возможности Include'ов. Одни используют их при первой возможности, другие стараются максимально от них отстраниться. Я не согласен с обоими категориями. Include, как и любые другие функции, нужно использовать только если при его использовании будет некоторое преимущество. Например при написании плагина, сохранения большого количества объектов / редко-редактируемого кода, но код который часто редактируется просто не советую содержать внутри Include'а. Например, при использовании большого количества Include'ов в коде станет намного легче запутаться, нежели при наличии голого кода в Source файле. В общем, используйте Include'ы в Pawn исключительно для помещения статических текстов, объектов, define'ов. Использование Include: Подключение файла a_samp.inc из папки с редактором Pawn "{PAWNO_FOLDER}/includes/" Код #include <../inc/objects.inc> Подключение файла objects.inc из папки с сервером "{SERVER_FOLDER}/inc/objects.inc"
Теперь поговорим о define'ах. Подобно Include'aм программисты расползаются на три категории, тех, кто их категорически отказывается использовать (Меньшинство), тех, кто их использует при каждой возможности (Большинство) и тех, кто использует их только тогда, когда нужно. Использование Define'ов (Макросов) рекомендую для замены часто-используемых ключей и статической информации. Например: Код #define ERROR_MES "[*] Ошибка" #define MYSQL_LOGIN "root" #define MYSQL_PASSWORD "123456" #define uName(%0) PlayerInfo[%0][pName] Define'ы, как и Include'ы используют исключительно для удобства. То есть, путем использовании Define вы не получите никакой оптимизации. (Особенно, если будете пытаться заменить фунцкии).
Теперь поговорим о главном: Функциях.
Есть два вида функций в Pawn: stock и public, у каждого свои достоинства и недостатки. Пару слов о public: - Перед public обязательно должен объявляться forward.
- Может быть вызван таймером.
- По слухам медленней stock'a (Проверять не буду, разница скорости работы скорее всего не значительная)
Теперь начнем. Что же является функцией в Pawn? Это определенный код, вызывающийся при запросе функции. Функции вполне схожи с функционалом Define'ов и Include'ов и могут быть использованы внутри их, как и внутри себя.
Например эта функция ищет игрока по нику:
Код stock SearchPlayerForNick(name[]){ new plid=-1; for(new i; i<MAX_PLAYERS; i++){ if(strcmp(name, uName(i))==0) plid=i, break; } return plid; }
Использование:
Код if(SearchPlayerForNick("John_Lucas")<0) return SendClientMessage(playerid, -1, "Игрок с таким именем не найден!");
strcmp, кстати говоря, тоже является функцией, но встроенной в сам язык Pawn. Некоторое время назад, программист с ником OKStyle придумал макрос: Код #define function %0(%1) forward %0(%1); public %0(%1)
Позволяющий использовать public в одну строку. Использование таких макросов я не поддерживаю, ибо это мешает форматированию кода, предусмотренного разработчиками.
На этом все, используйте то, что вам дано с умом!
Связь со мной: Skype: po61-rap E-Mail: len1nthe@gmail.com
if(time>=1500 && rep<500) { cout « "200 репы накручено!"; rep+=200; }
|
|
|
|