Функции: основы

Автор: BlackTok[BT] (участник нашего Discord)

Функции — одна из важнейших вещей в SQF, как и в других языках программирования. И в этом уроке мы разберем: для чего нужны функции, как их создавать и как использовать.
Пример:

_fnc = {};

 

Здесь мы создали переменную _fnc и присвоили ей функцию. Функция ограничена фигурными скобками, содержащими внутри себя код, который будет выполняться при вызове этой функции.
Пример:

_fnc = {_a = 5 + 10; _a};
_b = call _fnc;
_b //вернет нам 15

 

В функции можно передавать параметры, которые функция обработает.
Пример:

[parametr] call _fnc;

 

Для того, чтобы получить эти параметры внутри функции, мы должны использовать «Magic Variables» _this либо param или params
Пример 1:

parametr call _fnc; //вызываем функцию с одним параметром
_fnc = {_parametr = _this;}; // в функции создали переменную и присвоили ей значение, переданное в функции с помощью параметра

 

Пример 2:

[parametr1,parametr2] call _fnc; //вызываем функцию с массивом, содержащим 2 параметра
_fnc = {_parametr1 = _this # 0; _parametr2 = _this # 1;};

В функции создали две переменные и присвоили им значения, переданные в функции с помощью массива с параметрами.
Первой переменной мы присвоили первый элемент массива (_this # 0), так как в массивах индекс элемента начинается с 0

Пример 3:

[parametr1,parametr2] call _fnc; //вызываем функцию с массивом, содержащим 2 параметра
_fnc = {_parametr1 = param [0,"",[],[]]; _parametr2 = param [1,"",[],[]];}; // в функции создали две переменные и присвоили им значения, переданные в функции с помощью массива с параметрами. Первой переменной мы присвоили первый элемент массива (param [0]), так как в массивах индекс элемента начинается с 0

 

Пример 4:

[parametr1,parametr2] call _fnc; //вызываем функцию с массивом, содержащим 2 параметра
_fnc = {params ["_parametr1","_parametr2"];}; //с помощью params мы сразу создаем две переменные и присваиваем им значения параметров переданных в функцию

 

Теперь на практическом примере покажу, как использовать функции. Например нам нужна функция, которая будет принимать 3 значения, первые два значения складывать, а затем результат умножать на третье значение и в конце возвращать нам результат.
Пример:

//для облегчения визуального восприятия код функции можно писать на разных строках
_fnc = {
params ["_a","_b","_c"]; //принимаем параметры и присваиваем переменным
_res = (_a + _b) * _c; //производим операцию
_res //возвращаем результат
};

_a = 2;
_b = 5;
_c = 3;

_res = [_a,_b,_c] call _fnc; //теперь переменная _res = 21

Если же что-то непонятно, то можно спросить / уточнить в нашем Discord канале