Название темы слегка идиотское, но я правда не знаю как назвать её лучше.
wxvxw говорил как то, что конструкторы должны содержать минимум логики, потому что они не кешируются (или что-то в этом духе). Пожалуйста, объясни это ещё раз и откуда ты это узнал. )
Вопрос темы смежный с предыдущим: в code convention сказано, что значения у полей класса лучше объявлять сразу же вместе с определением. Например:

Код AS3:
private var _maskShape:Shape=new Shape(); //правильно

Код AS3:
private var _maskShape:Shape;
public function ClassConstructor(){
_maskShape=new Shape(); //неправильно
}
Вроде всё понятно, что первый вариант читабельный, однако если помыслить логически, КАК задаются эти самые переменные в abc-коде? По идее они делают одно и тоже. Логично подумать, что код из "правильного" примера транслируется так:

Код AS3:
private var _maskShape:Shape;
public function ClassConstructor(){
_maskShape=new Shape();
super();
}
super идёт после объявления переменных, так как мы можем в суперкласс передать любое поле класса, и оно уже будет создано на тот момент.
Раз оно создается в конструкторе, а код из конструктора стоит выносить - то я нарушал конвенцию и инициализировал переменные в методе init. Но недавно стал задумываться, что же на самом деле там обстоит и полез смотреть abc код.
При задании переменных "руками" в конструкторе всё четко и понятно. Мистика творится при задании как раз по "правильному" примеру. Дело в том, что простые типы не определяются там вообще. Сложные типы, например Object - честно создаются в конструкторе, всё хорошо. Но переменные, например, типа String и int просто напросто отсутствуют. Нет, они конечно в ролике присутствуют, как и их значения, но нигде в явном виде им не присваивается их значения. Это, конечно, очень круто, что это дело транслируется красиво, но я слабо в это верю. Интересует комментарий от компетентных людей.)
Однако, я был прав хотя бы насчет сложных типов - они объявляются в конструкторе. И вот всплывает вопрос - как стоило бы эти переменные объявлять? Как их объявляете Вы?