Уроки JASS
Основы синтаксиса, урок № 3. “Функции”
Введение
Если в кратце, то функция это некий кусок кода. Если у вас есть код который необходимо использовать в нескольких местах, то можно создать функцию и вместо постоянного копирования кода просто вызывать ее. Функция выглядит следующим образом:
Code
function <имя функции> takes <аргументы> returns <тип возвращаемого значения>
<код функции>
endfunction
Например:
Code
function Hello takes nothing returns nothing
call BJDebugMsg(“Hello world”)
endfunction
прим. BJDebugMsg пишет сообщение всем игрокам.
Для того чтобы воспользоваться созданной функцией необходимо ее вызвать:
Code
call <имя функции>(<аргументы>)
call Hello()
В итоге всем игрокам выдаст сообщение Hello world
Аргументы
Очень часто в функцию нужно передать какие-то переменные для того чтобы она с ними что-то сделала, например передвинула юнита. Для этого и существуют аргументы, чтобы функция брала аргумент, нужно написать его тип и имя:
Code
function Hello takes string str returns nothing
call BJDebugMsg(str)
endfunction
Для того чтобы функция брала несколько аргументов нужно перечислить их через запятую:
Code
function sum takes integer i1, integer i2 returns nothing
local integer i3 = i1 + i2
endfunction
Вот так, но эта функция абсолютно бесполезна т.к. переменная i3 локальная и при выходе из функции она уничтожится, и мы не узнаем что же там получилось.
Возвращаемое значение
Функция может вернуть какой-нибуть результат, для этого нужно указать тип возвращаемого значения:
Code
function sum takes integer i1, integer i2 returns integer
local integer i3 = i1 + i2
return i3
endfunction
Ключевое слово return используется для того чтобы вернуть значение, а так же для того чтобы завершить выполнение функции, все что после ретурна выполнятся не будет. Предыдущую функцию можно записать короче:
Code
function sum takes integer i1, integer i2 returns integer
return i1 + i2
endfunction
Функции могут принимать и возвращать любые типы переменных, кроме массивов.
В варкрафте есть одна неприятная особенность, а именно ограничение на количество операций в функции. Т.е. при достижении какого-то определенного количества операций (set и call) функция просто прекратит выполнение, несмотря на то, что должна была выполняться дальше. Но пугаться раньше времени не стоит, ограничение довольно большое и без изврата его превысить очень сложно (у меня не получалось).
Домашнее задание
Создать функцию, которая возводит реальное число в степень и возвращает полученное значение. Степень - целое число и должна быть больше 0, если условия не выполнены, то функция должна вернуть ноль.
Выполненное задание кидать в лс, текстом.