Приветствую Вас Гость | RSS

Flash. Обо всем по маленьку

Среда, 24.12.2025, 02:30
Главная » Статьи » Уроки ActionScript

Урок 5. Функции
Функции определяют повторяющиеся участки кода, или обычные операции в ActionScript. Создавая функцию, вы можете повторять одну и ту же операцию множество раз без необходимости заново писать один и тот же код каждый раз, когда вы хотите ее использовать. Вместо этого, все, что вам нужно сделать - это вызвать функцию, используя ее имя.

В ActionScript функции определяются двумя способами. Вы можете создать именованную Функцию, используя форму function [functionName] ([parameters]) { [code] }, или можете определить безымянную функцию, используя var [functionName] = function ([parameters]) { [code] }.  Именованные функции создают определения функции или метода, в то время как неименованные функции содержат переменные, которые ссылаются на «свободно меняющееся» определение функции.

// Named function

function doubleNumber(num) {

 return num*2;

}
// Same function defined as an anonymous function

// defined within the variable doubleNumber

var doubleNumber = function(num) {

 return num*2;

}

В приведенном выше примере создается функция с именем doubleNumber, которая принимает единственное числовое значение и возвращает это значение, умноженное на два. Для использования функции нужно вызвать, используя круглые скобки (()).

var x:Number = 10;

trace(doubleNumber(x)); // traces 20

Как и в случае с переменными, именованные функции не могут быть определены более одного раза для любой данной временной шкалы в ActionScript 3. Неименованные функции по прошествии времени могут ссылаться на множество функций, но не могут быть переопределены с помощью var, так как по существу они являются переменными. ActionScript 2 позволял изменять любое определение функции в любой момент. В ActionScript 3 можно менять только определение неименованных функций.

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

// Named function

function doubleNumber(num:Number):Number {

 return num*2;

}
// Same function defined as an anonymous function

var doubleNumber:Function = function(num:Number):Number {

 return num*2;

}

Если функция не возвращает значения, тогда ее возвращаемый тип должен быть void. Когда запускается функция с типом void, или если функция просто не может вернуть значение с помощью оператора return, то ее возвращаемое значение становится неопределенным.

function returnsNothing():void {

 // do nothing

}

trace(returnsNothing()); // traces undefined

Названная выше функция returnsNothing не только ничего не возвращает, но также и не принимает никаких значений – у нее нет списка параметров. Если вы пытаетесь ввести значения в функцию, когда она не имеет списка параметров, определенного для нее в ActionScript 3, вы получите сообщение об ошибке.

returnsNothing(3); // Error: Incorrect number of arguments

В ActionScript 2, тип Void использовался в качестве списка параметров при определении функции, чтобы показать отсутствие параметров. В ActionScript 3 вы просто оставляете список пустым. Использование типа Void в списке параметров в ActionScript 3 фактически заставит Flash думать, что переменная, названная Void, определена для списка параметров этой функции.

Примечание: параметры в сопоставлении с аргументами
Разница между параметрами и аргументами заключается в том, что параметры находятся в значении, используемом для определения функции. Аргументы – это фактические значения, предоставляемые функции во время ее использования. Вы можете видеть аргументы в качестве значений параметров.

С помощью ActionScript 3 вы теперь также можете определять для своих функций значения по умолчанию. 

// Here, message parameter is optional

function usesDefault(message:String = "hello"):void {

 trace(message);

}

usesDefault("test"); // traces "test"

usesDefault(); // traces "hello"

Используя значения по умолчанию, вы не только получаете возможность назначить значения для параметров, не используемых процедурой вызова функции, но также они позволяют вам определить функции с дополнительными параметрами, или параметрами, которые не нужно использовать. Параметры, у которых нет значений по умолчанию, должны предоставляться при вызове функции в ActionScript 3. В связи с этим, все дополнительные параметры должны быть определены в конце списка параметров. Ситуация, когда требуемый параметр определен после дополнительного параметра, недопустима.

// Error: Required parameters are not

// permitted after optional parameters

function usesDefault(message:String = "hello", num:Number):void {

 // code

}
// Correct; usesDefault needs at

// least 1 argument, accepts 2 at max

function usesDefault(num:Number, message:String = "hello"):void {

 // code

}

Как быть, если вы захотите позволить вызов функции с любым числом аргументов? В ActionScript 2 вы могли сделать это, просто опустив любой список параметров и сославшись на аргументы с использованием объекта arguments в функции. В ActionScript 3 отсутствие списка параметров означает, что функция не может быть вызвана с любыми аргументами. Вместо этого, вам следует использовать новый тип параметра, известный как …(rest).  Этот параметр идет в конце вашего списка параметров (или он может представлять ваш полный список параметров) и показывает, что любое число аргументов может использоваться при вызове функции. Параметр …(rest) записывается как …argumentsArrayName, где argumentsArrayName – это имя массива, который будет содержать прошедшие аргументы.

// Using the ...(rest) parameter

function passAnything(...statements):void {

 trace(statements.length +": "+ statements);

}

passAnything(); // traces 0:

passAnything(1); // traces 1: 1

passAnything("a", true, 0); // traces 3: a,true,0

Примечание: доступ к caller и callee
При использовании параметра …(rest), объект arguments не доступен вызову функции. Вместо этого, параметр …(rest) должен использоваться для получения прошедших аргументов. В отличие от arguments, …(rest), тем не менее, не имеет свойства caller, используемого для ссылки на текущую функцию. В ActionScript 3 ни arguments, ни …(rest) не имеют свойства callee, используемого для ссылки на функцию, вызывающую текущую функцию (свойство callee было доступно в объекте аргументов в ActionScript 2, но было удалено в ActionScript 3).
Категория: Уроки ActionScript | Добавил: anti_k (25.02.2010)
Просмотров: 961 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]