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

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

Старый 29.08.2010, 21:07
MrPoma вне форума Посмотреть профиль Отправить личное сообщение для MrPoma Посетить домашнюю страницу MrPoma Найти все сообщения от MrPoma
  № 2  
Ответить с цитированием
MrPoma
 
Аватар для MrPoma

Регистрация: Jul 2006
Адрес: Питер
Сообщений: 2,083
Отправить сообщение для MrPoma с помощью Skype™
Цитата:
Сообщение от Psycho Tiger Посмотреть сообщение
И вот всплывает вопрос - как стоило бы эти переменные объявлять? Как их объявляете Вы?
Объявляются-то они в области класса А вот значение им я присваиваю в конструкторе или методе. Для меня всегда было логичней так: в классе только объявление, а выполнение начинается с конструктора. Как-то так.

А что за мода у всех пошла, байт-код смотреть? Это что так интересно?
__________________
жж | твттр | гглплс | фсбк | вкнткт | гтхб

Старый 29.08.2010, 21:09
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 3  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
По байт-коду видно, где и чего делается лишний раз, что позволяет сократить время на обработку, а потом поведать всем, мол, так делать лучше.
__________________
тут я

Старый 29.08.2010, 22:41
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 4  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

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

Умный человек сказал что ненужно в конструкторе писать код лишний, а с другой стороны в конверсии сказано что код нужно писать вон там. Я сходу не смогу сказать, куда компилируется этот самый код с верхушки и правду можно найти только в байткоде. Помоему, в этом нет ничего плохого.

И на самом деле да, очень интересно =)

Старый 30.08.2010, 20:15
andrew911 вне форума Посмотреть профиль Отправить личное сообщение для andrew911 Найти все сообщения от andrew911
  № 5  
Ответить с цитированием
andrew911

Регистрация: Mar 2007
Сообщений: 545
Немо 440 показывает, что нормально все определяется (int и String)

Старый 30.08.2010, 23:04
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 6  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Цитата:
Сообщение от Psycho Tiger Посмотреть сообщение
КАК задаются эти самые переменные в abc-коде?
Что мешает воспользоваться спецификацией?
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 30.08.2010, 23:42
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 7  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Нет, с конструктором фишка в другом. JIT компилятор каждый раз компилирует конструктор повторно. Я не знаю чем это вызвано, но так вот работает.
__________________
Hell is the possibility of sanity

Старый 30.08.2010, 23:43
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 8  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,600
Записей в блоге: 17
Цитата:
Сообщение от dimarik Посмотреть сообщение
Что мешает воспользоваться спецификацией?
Маз можно придумать много, суть одна)

Скорее наиболее главный вопрос - это почему же большой конструктор это плохо и действительно ли это плохо. Остальные - подняты как околотрейдовые и их следовало бы задать чтобы навести тех, кто принимает участие в вопросе на должные мысли.

Ну, как то так.

UPD: постой, wvxvw, т.е. с точки зрения производительности разницы нет? Вынос в отдельный метод, по сути, служит для ускорения компиляции?
Тогда если так, почему в каком то продукте от Adobe, в котором анализировался код и искались потенциальные "кривости" кривостью было помечено "избыточный код в конструкторе". По тем же соображениям? Или избыточный в "логическом" смысле?

Столько вопросов, рррр..)


Последний раз редактировалось Psycho Tiger; 30.08.2010 в 23:45.
Старый 30.08.2010, 23:50
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 9  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Цитата:
Сообщение от wvxvw Посмотреть сообщение
Нет, с конструктором фишка в другом. JIT компилятор каждый раз компилирует конструктор повторно. Я не знаю чем это вызвано, но так вот работает.
Сслыка на источник будет?
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

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

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

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


 


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


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