Функции безусловно важны в программировании. Они упрощают код и делают его понятным для всех.
Создать функцию можно несколькими способами:
stock func_name() // stock - резервирует адрес в памяти, поэтому для функций рекомендуется использовать именно это { }
func_name() // отличия от stock в том, что если функция не используется, то pawn компилятор выдаст предупреждение { }
Ещё одна особенность этих способов в том, что при не использовании функции, заданной с помощью этих способов, компилятор их игнорирует и в скомпилированную программу они не включаются. Это очень удобно при использовании различных библиотек с огромным количеством функций, расширяющих функционал Pawn.
Есть ещё один способ создания функций:
forward func_name(); // объявляем о существовании данной функции public func_name() { }
При использовании этого способа вызов идёт по имени, а не по адресу. Этот способ хорош тем, что данную функцию можно вызвать из любого скрипта подключённого к серверу и можно запустить таймер с этой функцией. Рекомендуется использовать именно в этих случаях, ведь два первых способа являются более оптимизированными вариантами.
Рассмотрим более сложные конструкции:
Создадим функцию с принимаемым параметром:
stock sum(x, y) // функция возвращает сумму двух целых чисел { return (x + y); }
Использовать можно так:
new result = sum(5, 8); printf("result=%d", result);
Выведет: result=13
stock sum(x, y, &result = 0) // функция записывает в переменную result результат выполнения x+y { result = x + y; }
Использовать можно так:
new result; sum(5, 8, result); printf("result=%d", result);
Выведет: result=13
Для чисел других типов это выглядит так:
stock Float:sum(Float:x, Float:y) // функция возвращает сумму дробных чисел в виде дробного числа { return (x + y); }
Использовать можно так:
new Float:result = sum(5.4, 8.8); printf("result=%f", result);
Выведет: result=14.2
Для строк это выглядит так:
stock sum(x[], y) // функция выводит x и y { printf("x=%s, y=%d", x, y); }
Использовать можно так:
sum("lala", 8);
Выведет: x=lala, y=8