Объект "Function"

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

Объект функции так же, как и большинство объектов, имеет общие свойства.

Использование функций

Используйте объект функции, чтобы создать новое условие On Function (включенная функция). Введите "My function" (моя функция) в поле Name (имя). Пока проигнорируем второй параметр. Действие под названием Call function (вызвать функцию) запустит это событие. Вы можете создавать много событий On Function (включенная функция) с одинаковыми именами — столько, сколько захотите — тогда они включатся по порядку от верха к низу.


Для условия On Function (включенная функция) добавьте действие, например, Destroy Sprite (уничтожить спрайт), и добавьте еще одно действие Call Function "My Function" (вызвать функцию) к любому другому условию. Например:

EVENTS:

[Событие] Условие: On any key pressed; Действие: Call function "MyFunction".

[Событие] Условие: On function "MyFunction"; Действие: Destroy Sprite.

То есть всегда, при нажатии на любую клавишу, спрайт будет уничтожаться.

При вызове функции действие будет включать событие On function (включенная функция).

Полезность в событиях

Эта функциональность очень полезна для создания обслуживающих событий. Пример наверху очень простой, но событие On Function (включенная функция) может повторить много других действий (например, изменение зума для 5-ти слоев). Вы можете использовать одно единственное действие Call Function (вызвать функцию) вместо повторения одних и тех же событий. И это означает, что нужно будет изменить только одно событие вместо многих.

Используя подсобытия, вы можете даже запускать циклы и другие комплексные условия в событии On Function (включенная функция). Дополнительно, вы можете вызывать другие функции — но не ту же самую функцию (рекурсия не поддерживается).

Remember picked objects? (запомнить выбранные объекты?)

Этот параметр в действии Call Function (вызвать функцию) определяет, передаются ли выбранные действием объекты в условие On Function (включенная функция). Например:

EVENTS:

[Событие] Условие: Sprite X co-ordinate is less than 300; Действие: Call function "MyFunction".

[Событие] Условие: On function "MyFunction"; Действие: Destroy Sprite.

Если в Call function (вызвать функцию) установлено Forget picked objects (забыть выбранные объекты), то все спрайты уничтожатся независимо от их X-координат.

Если поставить Remember (запомнить), то спрайты с Х-координатой меньше 300 останутся в событии On Function (включенная функция), и таким образом уничтожатся спрайты только с X меньше, чем 300. Это сделает функцию эквивалентной такому событию:

EVENT:

[Событие] Условие: Sprite X co-ordinate is less than 300; Действие: Destroy Sprite.

Однако иногда, выбранные объекты не нужны (например, в численных расчетах), в таком случае опция Remember (запомнить) не имеет значения, и Forget (забыть) является предпочтительным вариантом.

Параметры

Вы можете добавлять значения функции, используя действие Add parameter (добавить параметр) до того, как вызовете функцию.

Параметры могут быть получены в событии функции по индексу с выражением Param. Т.е. Function.Param(1) получает первое значение, которое было добавлено, Function.Param(2) получает второе и т.д.

Возвратные значения

Действие Set return value (установить возвратное значение) может быть использовано внутри функции, чтобы получить результат, который был при вызове функции.

После действия Call Function (вызвать функцию) выражение Get return value (получить возвратное значение) (Function.Return) содержит возвратное значение.

Примечание: если вы использовали функции в других языках программирования, Set return value (установить возвратное значение) не возвращает его из функции, оно внутренне устанавливает значение, и событие функции возвращается после того, как запустились все действия и подсобытия.

Множественные действия Set return value (установить возвратное значение) в одной функции приводят к возврату значения, которое было установлено последним.

Вызов через выражения

Объект функции имеет уникальную способность вызвать любую функцию через выражение. Действие Set return value (установить возвратное значение) определяет, каким будет результат выражения. Например:

EVENTS:

[Событие] Условие: Start of Layout; Действие: Text > Set Text to Function.MyFunction.

[Событие] Условие: On function "MyFunction"; Действие: Set return value to "Hello, world!".

Если имя функции не содержит пробелов или неправильных знаков, ее можно будет вызвать, используя имя функции как выражение (см. пример вверху). Функции, вызванные через выражения, всегда забывают выбранные объекты.

Примечание: если функция, вызванная через выражение, не устанавливает возвратного значения, то в режиме отладки (debug mode) показывается предупреждение, а в нормальном превью возвращается 0.

Вы также можете устанавливать любое количество параметров для выражения функции, например:

EVENTS:

[Событие] Условие: Start of Layout; Действие: Text > Set Text to Function.MyFunction(100, 77, 3).

[Событие] Условие: On function "MyFunction"; Действие: Set return value to Function.Param(1) + Function.Param(2) + Function.Param(3).

В данном случае, текст будет установлен как "180" (сумма трех параметров: 100 + 77 + 3).

Пример:

Предположим, мы хотим функцию, которая генерирует произвольное число между двумя числами, например Function.RandomBetween(10,20) должна выдавать число между 10 и 20.
Мы используем следующее:

EVENT:

[Событие] Условие: On function "RandomBetween"; Действие: Set return value to Function.Param(1) + random(Function.Param(2) - Function.Param(1)).

Называние условий

Condition Aliasing (называние условий) — специальный метод вызова функций; как ярлык для тестирования нескольких условий в одном. Условие Call alias (вызвать псевдоним) включает условие On alias (при вызове псевдонима), которое вы можете добавить к другим условиям. Затем добавьте к событию действие Return true (вернуть правду) в категории Condition Aliasing. Даже если не вызывать это действие, объект функции всё равно будет работать (естественно, если смежные условия окажутся правдой).

Например:

EVENTS:

Условие: On alias "CtrlA pressed";

Условие: Control key is down;

[Событие] Условие: A key is down; Действие: Return true (under Condition Aliasing).

[Событие] Условие: "CtrlA pressed"; Действие: Set text object text to "Shortcut is pressed".

Обратите внимание, что второе событие — это условие Call alias (вызвать псевдоним), которое показывается только как имя псевдонима. Это демонстрирует, как легко вы можете упростить условия, просто давая им имена, так называемые «alias».

Режимы Isolated vs. Inline

Этот параметр в условии Call Alias (вызвать псевдоним) аналогичен Remember picked objects (запомнить выбранные объекты) в действии Call Function (вызвать функцию).

В режиме Isolated (изолированный) (сопоставим с Forget), On Alias (при вызове псевдонима) вызывается и только результат правда/ложь передается обратно — то есть, если On Alias выбирал какие-то объекты, они забудутся.

В режиме Inline (встроенный) (сравним с Remember), все текущие выбранные объекты перейдут к событию On Alias (при вызове псевдонима), которое может потом выбрать другие объекты и передать их обратно к вызывающему событию.

Другими словами, с Inline выбранный объект затрагивает оба события.

Пример:

EVENTS:

[Событие] Условие: "Pick Sprites in zone A" (inline); Действие: Destroy Sprite.

[Событие] Условие: On alias "Pick Sprites in zone A";
Условие: Sprite X is less than 300; Действие: Return true.

В этом случае, так как стоит Inline, условие On alias (при вызове псевдонима) выберет все объекты с X меньше, чем 300. Это передастся обратно к вызывающему событию Destroy Sprite (уничтожить спрайт) и уничтожит спрайты только с Х меньше, чем 300, потому что они были выбраны и запомнились в условии.

Если "Pick Sprites in zone A" изменить на Isolated, то выбранные объекты забудутся, и только истинный/ложный результат будет использоваться. В конкретном случае, как только спрайт пройдет влево от Х-координаты 300, все спрайты будут уничтожены, потому что НИ один не был выбран.

Также псевдонимы Inline могут свободно комбинироваться, например:

EVENTS:

[Событие] Условие: "Pick Sprites in zone A" (inline);
Условие: "Pick Sprites in zone B" (inline); Действие: Destroy Sprite.

[Событие] Условие: On alias "Pick Sprites in zone A";
Условие: Sprite X is less than 300; Действие: Return true.

[Событие] Условие: On alias "Pick Sprites in zone B"
Условие: Sprite Y is less than 300; Действие: Return true.

Это уничтожит только спрайты в зоне наверху и слева от точки (300,300).

Пример:

Условие, которое проверяет, содержит ли объект текста гласные буквы:

EVENTS:

[Событие] Условие: On alias "Text contains no vowel";
Условие: Find(Text.Text, "a") equal to 0 (то есть, не нашел);
Условие: Find(Text.Text, "e") equal to 0;
Условие: Find(Text.Text, "i") equal to 0;
Условие: Find(Text.Text, "o") equal to 0;
Условие: Find(Text.Text, "u") equal to 0; Действие: Return true.

[Событие] Условие: On button clicked;
Условие: [Invert] "Text contains no vowel"; Действие: Messagebox: "Text contained a vowel".

Дальнейшие идеи

Это еще не сделано, но в будущем появится возможность добавлять параметры к именам условий. Это позволит вам делать тест одной строки, а не целого объекта, как в примере выше.



Автор перевода: Mary Jane

Опубликовано: 27 октября, 2010

Категория: Объекты