Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Нужна ли переменная в данном коде? (http://www.flasher.ru/forum/showthread.php?t=181094)

Srednas 15.06.2012 13:42

Нужна ли переменная в данном коде?
 
Здравствуйте.
Копался в чужом коде и наткнулся на такой цикл:
Код AS3:

for (var i:int = 0, j:int = 0; i < num; i++) {
        object.s[j++] = data.readFloat();
        object.s[j++] = data.readFloat();
}

Я не понимаю для чего нужна «j». Может объяснит кто, какой в ней смысл?

Wolsh 15.06.2012 14:10

Так красивее? Понятнее?
Код AS3:

for (var i:int = 0; i < num * 2; i += 2) {
        object.s[i] = data.readFloat();
        object.s[i+1] = data.readFloat();
}


expl 15.06.2012 14:38

Вероятно, можно было бы и так:
Код AS3:

for (var i:int = 0; i < num; i++) {
        object.s.push(data.readFloat());
        object.s.push(data.readFloat());
}

Только выполнятся будет в пару раз дольше, а код, видимо, был критичным.

udaaff 15.06.2012 14:51

Мне непонятен смысл данной конструкции :) Возможно, конечно, код вырван из контекста.

Srednas 15.06.2012 16:10

Цитата:

Сообщение от expl (Сообщение 1084726)
Только выполнятся будет в пару раз дольше, а код, видимо, был критичным.

Код AS3:

// 1
t = getTimer();
for (var i:int = 0, j:int = 0; i < max; i++) {
        v[j++] = 10;
        v[j++] = 10;
}
t = getTimer() - t;
trace("1: "+ t)// 49
// 2
v = new Vector.<uint>;
t = getTimer();
for (var k:int = 0; k < max*2; k += 2) {
        v[k] = 10;
        v[k+1] = 10;
}
t = getTimer() - t;
trace("2: "+ t)// 44
// 3
v = new Vector.<uint>;
t = getTimer();
for (var n:int = 0; n < max; n++) {
        v.push(10);
        v.push(10);
}
t = getTimer() - t;
trace("3: "+ t)// 152

Получилось, что 2 вариант быстрее. Выходит, первый — лишь «для красоты»?

expl 15.06.2012 16:49

49 и 44 - можно сказать что разницы нет.
Вообще да, для красоты. Но Вы пишите так, как понятнее Вам и вашим коллегам.
Например один товарисч (и я за ним) ничуть не смущались, выравнивая картинку по центру таким образом (с округлением координат):
Код AS3:

bitmap.x = int(areaWidth - bitmap.width) >> 1;

Но другие коллеги раздражались и пришлось писать так:
Код AS3:

bitmap.x = int((areaWidth - bitmap.width) * .5);

Впринципе, я к этой записи прывык и мне все равно каким способом. Зато коллеги не раздражаются.

Eщё с первым способом проще править тело цикла, это фактически аналог push().

etc 17.06.2012 13:37

Srednas, если тест написан в первом кадре в IDE, тест заведомо ничего не показывает.

udaaff 17.06.2012 18:18

А где нужно тесты располагать? И от чего это зависит?

etc 18.06.2012 12:34

Цитата:

Сообщение от udaaff (Сообщение 1084868)
А где нужно тесты располагать? И от чего это зависит?

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

i.o. 18.06.2012 22:21

Да и в релизном плеере не помешало бы запустить.
trace как бы намекает на дебаг-версию...


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

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