временные переменные

#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 необходима и в некоторых других ситуациях (но не всегда). Это большой объем кода, и я не планирую передавать его части другим разработчикам, потому что в настоящее время я работаю сам.