#2 Include's, Define's, Functions - Форум Cheat-Master.ru
  • Страница 1 из 1
  • 1
Модератор форума: Phoenixxx_Czar, Getbackthere, [CM]OlegEhtler  
#2 Include's, Define's, Functions
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:
Код
#include <a_samp>

Подключение файла 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;
}
  • Страница 1 из 1
  • 1
Поиск: