Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 29.08.2010, 19:24
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 1  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,600
Записей в блоге: 17
По умолчанию ABC-код: придание значений в блоке определения для полей класса

Название темы слегка идиотское, но я правда не знаю как назвать её лучше.

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

Однако, я был прав хотя бы насчет сложных типов - они объявляются в конструкторе. И вот всплывает вопрос - как стоило бы эти переменные объявлять? Как их объявляете Вы?

Создать новую тему   Часовой пояс GMT +4, время: 09:19.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 09:19.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.