Тема: Event Caller
Показать сообщение отдельно
Старый 29.03.2012, 04:13
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 8  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Код AS3:
for (var j=0; j<xml.mob.length(); j++) {
// var j=0 - не объявлен тип переменной.
// var j=0 - инфиксные операторы принято отделять пробелами за исключением обозначений типов.
// j никогда не будет больше int.MAX_VALUE, но так, как вы его объявили, он будет типа Number
// при этом будет выполнять более простые операции для целых чисел более сложным способом
// как для чисел с плавающей запятой.
// j<xml.mob.length() - см. инфиксные операторы.
// j<xml.mob.length() - это условие будет рассчитано каждый виток цикла. Оно само по себе
// представляет вложенный цикл т.е. цикл по всем детям xml с выборкой, потом цикл по
// всем детям mob с выборкой.
	mob[j]=new Object; /* вот эти */
	// см. инфиксные операторы.
	// mob судя по всему типа XMLList, поэтому код приведенный выше равносилен:
	// mob[j] = XML("");
	// что само по себе бессмысленно.
	// new Object; - использует неидиоматическую запись вызова конструктора
	// нужно, как минимум, new Object();
	// более того, существует короткая запись: {}, которая, кроме всего прочего
	// занимает меньше памяти (по случайному стечению обстоятельств).
	// Но хуже всего то, что использование динамического объекта в этом месте ничем не
	// обосновано. Нужно было создавать объект со статическим типом. Динамические
	// объекты нужно создавать только тогда, когда не-динамические создавать не возможно.
	mob[j].timer=new Timer(50, 50); /* вот эти */
	// вы повторяете одну и ту же операцию доступа к элементу по индексу. Нормальным
	// подходом было бы закешировать созданный вами ранее объект в переменную.
	// создавать новый Timer каждый раз - непозоволительное расточительство. Время всегда одно,
	// и от количества хронометров не изменится.
	mob[j].timer.start(); /* вот эти */
	// см. кеширование.
	// кроме всего, начав выражение с динамического доступа, и не приведя тип к какому-нибудь
	// статическому типу вы продолжаете пользоваться механизмом поиска свойств по имени
	// вместо того, чтобы позволить компилятору найти нужное свойство еще на этапе компиляции.
	mob[j].timer.addEventListener(TimerEvent.TIMER, function (e:TimerEvent) {
	// см. про отсутсвие типизации.
	// e:TimerEvent - очень короткое имя переменной. слово event не достаточно длинное,
	// для того, чтобы его сокращать. Однобуквенные переменные не пройдут никакой код-ревью.
	// кроме того, что вы в цикле понасоздавали таймеров, вы теперь еще понасоздавали
	// функций, в то время, как достаточно было бы только одной.
	// у функции не указан возвращаемый тип. - это предупреждение компилятора
	// т.е. скомпилируется, но в большинстве компаний которые производят продукцию
	// сколь-нибудь серьезного уровня с использованием AS3 такой код не разрешат
	// положить в репозитори.
		/* И вот здесь надо обратиться к этому mob[j] */
		// если бы вы исправили все остальное, ну или хотя бы принципиальную
		// часть, то этот вопрос у вас бы не возник, т.как проблема
		// решилась бы сама по себе.
	});
}
__________________
Hell is the possibility of sanity