Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Архив Flasher.ru > Flash > ActionScript

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 10.07.2002, 03:38
  № 1  
Suhoff
Guest

Сообщений: n/a
По умолчанию Занимательный ActionScript ('for' <--> 'while')

По мере продолжения изучения грамматики AS, у меня возник вопрос - а зачем, собственно, нужна инструкция for (но не for(... in ...) - с ней понятно), если всё, что можно сделать с помощью этой инструкции можно сделать и с помощью инструкции while?
Смотрим определения в ECMA-262:

IterationStatement : See 12.6
................................................................
while ( Expression ) Statement
for (ExpressionNoIn(opt); Expression(opt) ; Expression(opt) ) Statment
......................1.........................2......................3......................
................................................................................................
(opt) означает, что это выражение -Expression, можно опустить.

/Выражение 1/ выполняется один раз при инициализации инструкции for, поэтому его можно вынести из этой инструкции -

ExpressionNoIn(opt);for (; Expression(opt) ; Expression(opt) ) Statement
..................1................................2................................3......................

/Выражение 3/ выполняется только тогда, когда выражение 2 имеет значение true, поэтому его тоже можно вынести из инструкции и записать в эквивалентном виде -

ExpressionNoIn(opt);for (; Expression(opt) ; ) {Expression(opt);Statement};
..................1................................2................................3.................
a <for (; Expression(opt) ; )>- это в чистом виде <while ( Expression )> (если имеем <for(;;)> то тогда <while(true)>).

Спрашивается - зачем плодить лишние инструкции?????
Или я ошибаюсь???

Кстати замечаем, что везде в определении инструкций for и while используются Expression. Смотрим определение для Expression:

Expression : See 11.14
AssignmentExpression
Expression , AssignmentExpression

те Expression - это любое конечное количество AssignmentExpression разделённых запятой!!
Например: s=f,v>>k,c<d - это Expression,
и a=(b=1+1,2+2) - это тоже Expression
причём для вычисления ЗНАЧЕНИЯ Expression берётся ПОСЛЕДНЕЕ AssignmentExpression!! (в примере a=4,b=2);

Это в некоторых случаях можно использовать в вычислениях.
Рассмотрим вычисление факториала числа N в стандартном представлении с помощью цикла for:
(для конкретности N=10)
1)
.......
N=1;
for (var i=1;i<=10;i++) N*=i;
.......
А теперь запишем то же самое с помощью цикла while

2) N=i=1;while(N*=i,++i<=10);

так вот - второй вариант на моём компе выполняется на 20% быстрее, чем первый!!!

Впрочем, можно записать вычисления факториала и третьем варианте -

3) for (N=i=1;N*=i,++i<=10;);

причём скорость вычисления 3-го варианта очень близка к скорости вычисления 2-го. По-видимому 3 и 2 транслируются в один и тот же код.
Кстати, варианты 2 и 3 вызывают, по крайней мере у SWFscaner'a, лёгкую истерику - понять, что же делается в раскодированной инструции совершенно невозможно.
Это тоже , я думаю, можно использовать ;).

PS. Возможно это всё уже давным давно известно, и я изобретаю велосипед, но мне было бы интересно выслушать мнение флашеров по этому поводу.

Создать новую тему   Часовой пояс GMT +4, время: 11:57.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 11:57.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.