Руководство по actionscript. часть 1, стр. 100

// Создать интервал, выполняющий функцию doSomething( ) каждые // 50 миллисекунд. Присвоить возвращаемый идентификатор интервала // переменной interval ID. var interval ID = set Interval(doSomething. 50);

// …Далее в программе прекратить автоматический вызов функции // doSomething( ) clearlnterval(interval ID);

Класс Timer, рассматриваемый в разд. «Пользовательские события» гл. 12 и разд. «Создание

$ 1 щ анимации с использованием события TimerEvent.71MER» гл. 24, предоставляет гораздо более широкие возможности управления периодическим выполнением функций или методов.

В следующем коде продемонстрирован простейший класс Clock, который выводит отладочное сообщение «Tick! » один раз в секунду. Обратите внимание на использование литерала функции и собственных функций set Interval ( ) и trace ( ).

package { import flash. utils. set Interval;

public class Clock { public function Clock ( ) { // Выполнять литерал функции один раз в секунду

ниже:

setlnterval(function ( ) {

traceC’Tick!»); }. 1000):

}

}

}

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

package { import flash. utils. setlnterval;

public class Clock { public function Clock ( ) { // Выполнять функцию tick( ) один раз в секунду setlnterval(tick. 1000);

function tick ( ):void { traceC’Tick 1″);

}

}

}

}

Можно утверждать, что версия класса Clock, реализованная с помощью вложенной функции, легче для чтения. Литералы широко используются при связывании функций с динамическими переменными экземпляра — этот вопрос рассматривается в разд. «Динамическое добавление нового поведения в экземпляр» гл. 15.

Рекурсивные функции

Рекурсивная функция — это функция, вызывающая саму себя. Следующий код демонстрирует простейший пример рекурсии. Всякий раз при выполнении функции trouble ( ) происходит ее повторный вызов:

function trouble ( ) { troubleC );

}

Если рекурсивная функция безусловно вызывает саму себя, как функция trouble ( ) в нашем случае, возникает бесконечная рекурсия (то есть такое состояние, когда функция не прекратит вызывать саму себя никогда). Без проверки условия бесконечная рекурсия теоретически привела бы к тому, что программа оказалась бы в бесконечном циклическом процессе выполнения функции. На практике, чтобы избежать подобной ситуации, рекурсивные функции вызывают сами себя только при выполнении заданного условия. Одним из классических примеров применения рекурсии является вычисление факториала, который представляет собой произведение всех целых положительных чисел, меньших либо равных данному числу. Например, факториал числа 3 (на математическом языке это записывается как 3!) равен 3 х 2 х 1, то есть 6. Факто-

риал числа 5 равен 5x4x3x2x1, то есть 120. В листинге 5.1 продемонстрирована функция для вычисления факториала числа, реализованная с помощью рекурсии.

Листинг 5.1. Вычисление факториалов с помощью рекурсии

function factorial (n) { if (n < 0) {

return; // Неправильное число, завершаем работу } else if (n <= 1) {

return 1; } else {

return n * factorial(n-1);

}

// Использование в программе; factorial(3); // Возвращает: 6 factorial(5); // Возвращает: 120

Вычислить факториал можно и с помощью цикла, полностью заменяющего рекурсию, как показано в листинге 5.2.

Листинг 5.2. Вычисление факториала без использования рекурсии

function factorial (n) { if (n < 0) {

return; // Неправильное число, завершаем работу } else { var result = 1;

for (var i = 1; i <= n; i++) { result = result * i;

}

return result;

}

}

В листингах 5.1 и 5.2 представлены два различных способа решения одной задачи. Рекурсивный подход гласит: «Факториал числа 6 равен числу 6, умноженному на факториал числа 5. Факториал числа 5 равен числу 5, умноженному на факториал числа 4…» и т. д. Нерекурсивный подход предполагает выполнение цикла для чисел от 1 до я, где происходит перемножение этих чисел, в результате чего получается одно большое число.

Использование рекурсивных функций считается элегантным подходом, поскольку оно обеспечивает простое решение сложных задач — циклический вызов одной и той же функции. Тем не менее повторяющиеся вызовы функции являются менее эффективными, чем итерации цикла. Нерекурсивный подход, применяемый для вычисления факториалов, во много раз эффективнее рекурсивного. Кроме того, нерекурсивный подход исключает достижение максимальной глубины рекурсии, равной по умолчанию 1000, которая, однако, может быть изменена аргументом компилятора def ault-script-limit s.

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

Оставить комментарий

Вы должны авторизоваться для отправки комментария.

Полезные ссылки
Случайные записи
  • 06.03.2011">Руководство по actionscript. часть 4, стр. 127
  • 04.03.2011">Руководство по actionscript. часть 5, стр. 035
  • 17.03.2011">Руководство по actionscript. часть 2, стр. 154
  • 03.06.2010">Самоучитель по креативному веб-дизайну. Книга 3, стр.79
  • 23.01.2011">Руководство по actionscript. часть 1, стр. 044
  • 27.08.2011">Размещение сервера в датацентре
  • 27.02.2011">Руководство по actionscript. часть 6, стр. 037
  • 10.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.66
  • 14.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.60
  • 10.03.2011">Руководство по actionscript. часть 4, стр. 028
  • 23.01.2011">Руководство по actionscript. часть 1, стр. 030
  • 23.01.2011">Руководство по actionscript. часть 1, стр. 068
  • 26.02.2011">Руководство по actionscript. часть 6, стр. 050
  • 15.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.37
  • 10.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.118
Опрос

Какие цвета вы предпочитаете?

View Results

Loading ... Loading ...