PDA

Просмотр полной версии : Отличие создания глобальной переменной от инициализации


tsarapkabel
17.04.2011, 01:19
Существует ли разница между созданием глобальных переменных при объявлении и созданием в теле функции?
За исключением момента присвоения значения.

Например:package {

public class Main extends Sprite {

private var _myVariable:Sprite = new Sprite(); //создаём сразу при объявлении
private var _myString:String = ""; //создаём сразу при объявлении

public function AnyFunction() {


}
}
}package {

public class Main extends Sprite {

private var _myVariable:Sprite;
private var _myString:String;

public function AnyFunction() {
_myVariable = new Sprite(); //создаём в теле функции
_myString= ""; //создаём в теле функции
}
}
}

in4core
17.04.2011, 01:24
Существует. первое как заявляет адоба работает быстрее. Ну а по факту, подумайте сами, удобнее же объявлять сразу ( если это возможно ), чем потом.

Psycho Tiger
17.04.2011, 02:35
Речь идёт о создании экземпляров строчкой объявления или перенос присвоения в конструктор?
Для сложных типов разницы нет, при компиляции они переносятся в конструктор. Для простых есть.

in4core, тема мне тоже интересна. Где можно прочитать, что там Адоуб пишет?

tsarapkabel
17.04.2011, 02:37
in4core , ты не совсем правильно понял вопрос :)

Adobe, Мук и прочие орильевцы создают только простые переменные (int, boolean, String, и т.п.), а экземпляры не простых создают в функциях (new Sprite(), new Timer(100,500), и т.п.).
В чём разница, почему не наоборот?

UPD:
Psycho Tiger, про сложные понял, а с простыми в чём отличие?

in4core
17.04.2011, 03:10
in4core, тема мне тоже интересна. Где можно прочитать, что там Адоуб пишет? Поищите по форуму, эта тема где то обсуждалась, кто то об этом писал, сказал с его* слов

Psycho Tiger
17.04.2011, 12:36
Psycho Tiger, про сложные понял, а с простыми в чём отличие?
В байткоде их объявление происходит где-то вне конструктора. Я не особо искал где, но я так и не нашел.
Денис подсказывает: "простые из таблиц берутся"

etc
17.04.2011, 12:36
В байткоде их объявление происходит где-то вне конструктора. Я не особо искал где, но я так и не нашел.

Из таблиц ABC.

honest_man
17.04.2011, 12:39
tsarapkabel, никакой разницы между двумя блоками кода, вообще. Это эквиваленты. Просто в первом, создание и инициация происходит в инициализаторе класса, а во втором - создание в инициализаторе класса, а инициация в методе-конструкторе.

Логически, ни в скорости ни в каком-то эфимерном качестве не должно быть разницы.

tsarapkabel
17.04.2011, 15:03
Спасибо большое, вопрос исчерпан!

Zebestov
17.04.2011, 15:27
А по феншую (читай стилю)? Ну кто как делает обыкновенно?

easy.proger
17.04.2011, 15:33
А по феншую (читай стилю)? Ну кто как делает обыкновенно?

Честно, как то не задумывался, но судя по исходникам - обычно в конструкторе