- Баллы
- 153
-----------------------------------------------------
Разработка VarScript 0.5 (ссылки на другие уроки, полезные функции, модули и т.д.)
VarScript на dev.bukkit.org (скачать можно тут)
-----------------------------------------------------
Создание функции
Функции в varscript являются независимыми объектами и объявить их можно практически на любом участке кода
Название{ (тело функции) }
Такая конструкция создает новую функцию и оставляет ее на вершине стека.
Функция может не содержать имени (она будет безымянной)
Пример:
/> {ME 0:2:0 THROW 20 TICKS BOLT KILL} %sceneKill
/> @sceneKill RUN ## запуск функции
%Название{ (тело функции) }
Эта конструкция определит функцию в локальной области видимости. Проще говоря, конструкция
%Foo{ bar }
аналогична записи
Foo{ bar } %%Foo
И опять же пример:
%SceneKill{ ## Player -> Player
ME SceneKill
Функции можно вызывать, просто указав их имя. Т.е. конструкция
ME SceneKill
полностью аналогична
ME @SceneKill RUN
$Название{ (тело функции) }
Данная конструкция присвоит функцию как поле текущему объекту THIS. Примеры и применение будут рассмотрены позже.
Вызов функции
Для вызова функции используется команда RUN
Если функция записана в переменной, достаточно написать имя этой переменной.
Функция должна быть определена до ее вызова!
SayHello ## выдаст ошибку, значение переменной SayHello - не функция
%SayHello{ ## Функция
SayHello ## запустит функцию SayHello
@SayHello RUN ## точно также запустит функцию SayHello
Получается, что функция видна в теле программы после объявления (как и переменные).
Передача параметров в функцию
Функцию стоит воспринимать как линейный набор команд, исполняющийся при вызове.
То есть
ME 10 SHIFT
Исполнится точно также, что и
ME { 10 SHIFT }RUN
Функции при вызове используют тот же самый стек.
Таким образом, чтобы передать значение в функцию, нужно перед вызовом функции оставить это значение в стеке.
<продолжение ниже>
Разработка VarScript 0.5 (ссылки на другие уроки, полезные функции, модули и т.д.)
VarScript на dev.bukkit.org (скачать можно тут)
-----------------------------------------------------
Это четвертый тутор по плагину VarScript 0.5
В нем рассматриваются технологии создания функций и замыканий.
Предполагается, что читатель уже достаточно хорошо знаком с плагином.
Создание функции
Функции в varscript являются независимыми объектами и объявить их можно практически на любом участке кода
Правило: Все, что находится внутри фигурных скобок - является отдельной функцией.
Название{ (тело функции) }
Такая конструкция создает новую функцию и оставляет ее на вершине стека.
Функция может не содержать имени (она будет безымянной)
Пример:
/> {ME 0:2:0 THROW 20 TICKS BOLT KILL} %sceneKill
/> @sceneKill RUN ## запуск функции
%Название{ (тело функции) }
Эта конструкция определит функцию в локальной области видимости. Проще говоря, конструкция
%Foo{ bar }
аналогична записи
Foo{ bar } %%Foo
И опять же пример:
%SceneKill{ ## Player -> Player
0:2:0 THROW ## подбросить вверх
20 TICKS ## подождать 1 секунду
BOLT ## ударить молнией
KILL ## убить
}ME SceneKill
Функции можно вызывать, просто указав их имя. Т.е. конструкция
ME SceneKill
полностью аналогична
ME @SceneKill RUN
$Название{ (тело функции) }
Данная конструкция присвоит функцию как поле текущему объекту THIS. Примеры и применение будут рассмотрены позже.
Вызов функции
Для вызова функции используется команда RUN
Если функция записана в переменной, достаточно написать имя этой переменной.
Функция должна быть определена до ее вызова!
SayHello ## выдаст ошибку, значение переменной SayHello - не функция
%SayHello{ ## Функция
"Hello World" PRINT ## напечатать Hello World
}SayHello ## запустит функцию SayHello
@SayHello RUN ## точно также запустит функцию SayHello
Получается, что функция видна в теле программы после объявления (как и переменные).
Передача параметров в функцию
Функцию стоит воспринимать как линейный набор команд, исполняющийся при вызове.
То есть
ME 10 SHIFT
Исполнится точно также, что и
ME { 10 SHIFT }RUN
Функции при вызове используют тот же самый стек.
Таким образом, чтобы передать значение в функцию, нужно перед вызовом функции оставить это значение в стеке.
<продолжение ниже>