#actionscript-3 #variables #temp
#actionscript-3 #переменные #temp
Вопрос:
Я хотел бы знать, в чем разница, когда я пишу временную переменную, подобную этой (это всего лишь примеры):
версия 1
for each tempEnemy in enemyManager.enemies {
var tempX:int = tempEnemy.x;
}
или это:
версия 2
for each tempEnemy in enemyManager.enemies {
tempEnemy.oldX = tempEnemy.x;
}
Что неправильно, а что правильно? В настоящее время я пишу его как версию 2, и я не уверен, следует ли мне менять его на версию 1. Может кто-нибудь помочь мне с этим, пожалуйста? Я знаю, что большинство разработчиков пишут как версия 1, но я немного сбит с толку, потому что я совершенно не осведомлен о версии 1. Если я использую версию 1, означает ли это, что мое значение хранится явно во временной переменной, которая очищается в каждом цикле?
Ответ №1:
Также… Добавление переменной :variableType (int, String, Number и т.д.) Помогает в создании подсказок и отладке кода.
Ответ №2:
В версии 1 объявление:
var tempX:int
определяет переменную, которая сохраняется только до тех пор, пока выполняется итерация цикла for (или для каждого), в котором она находится. Каждая итерация tempX
определяется, ей присваивается значение из Enemy
объекта, и в конце оно оставляется для сборки мусора.
В версии 2 вы ссылаетесь на две переменные, прикрепленные к Enemy
объекту, на который ссылается временная переменная с именем tempEnemy
.
В обеих версиях ссылка на Enemy
объект tempEnemy переназначается Enemy
объекту следующей итерации.
У каждого метода есть свои преимущества. С точки зрения памяти, версия 2, вероятно, лучше, поскольку она изменяет существующую переменную снова и снова, а не создает новую переменную, которая отбрасывается в конце каждой итерации. С другой стороны, версия 1 не требует, чтобы у вас были oldX
определенные в ее классе переменные, которые часто могут быть достаточно запутанными без такого рода переменных.
Лучшие практики работы с кодом основаны на (а) работе с другими программистами, которые должны уметь читать и понимать код, и (б) выходе из проекта и возвращении к нему позже, когда вам нужно будет уметь читать и понимать свой собственный код. Для коротких проектов, которыми вы не планируете делиться, подойдет версия 2 (и, вероятно, более экономичная по объему памяти), но любой крупный проект должен использовать что-то более похожее на версию 1.
Другое соображение заключается в том, собираетесь ли вы использовать эту переменную где-либо, кроме функции, в которой она определена (set)? Если нет, то вам не нужно сохранять его в объекте, который снова указывает на версию 1.
Комментарии:
1. Большое вам спасибо! Этот ответ очень подробный и многое упрощает.:) Теперь к вашему вопросу: Да, эта временная переменная с именем tempEnemy.oldX необходима и в некоторых других ситуациях (но не всегда). Это большой объем кода, и я не планирую передавать его части другим разработчикам, потому что в настоящее время я работаю сам.