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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 05.05.2012, 08:52
billion вне форума Посмотреть профиль Отправить личное сообщение для billion Посетить домашнюю страницу billion Найти все сообщения от billion
  № 1  
Ответить с цитированием
billion

Регистрация: Jan 2002
Сообщений: 149
Отправить сообщение для billion с помощью ICQ
По умолчанию Правильное и быстрое объявление переменных в классе

Здравствуйте!

написал класс и не пойму как объявить динамические переменные. Почитал инет и все по разному советуют. Подскажите как правильно и быстро объявить их?

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

Варианты:

Код AS3:
private var vec1:Vector.<uint>;
private var vec2:Vector.<uint> = null;
private var vec3:Vector.<uint> = new Vector.<uint>;
 
private var str1:String;
private var str2:String = null;
private var str3:String = '';
 
private var _int1:int;
private var _int2:int = 0;

Старый 05.05.2012, 10:08
maxkar вне форума Посмотреть профиль Отправить личное сообщение для maxkar Найти все сообщения от maxkar
  № 2  
Ответить с цитированием
maxkar

Регистрация: Nov 2010
Сообщений: 497
Цитата:
написал класс и не пойму как объявить динамические переменные.
Обычные у вас переменные. Динамические - это те, которые в dynamic class и без объявления.

Цитата:
Подскажите как правильно и быстро объявить их?
В каком смысле быстро?

Цитата:
не пойму когда их в нулл надо ставить сразу, а когда просто тип обозначить.
А цель какая? Если сомневаетесь, ставьте везде начальное значение.

Цитата:
Варианты:
vec1 и vec2 дадут одно и то же. vec3 - другое. str1 и str2 - одинаковы, str3 - отличается от них. Оба инта одинаковы по действию.

Старый 05.05.2012, 11:00
billion вне форума Посмотреть профиль Отправить личное сообщение для billion Посетить домашнюю страницу billion Найти все сообщения от billion
  № 3  
Ответить с цитированием
billion

Регистрация: Jan 2002
Сообщений: 149
Отправить сообщение для billion с помощью ICQ
тьфу блин "динамические" ... в смысле не статичиские.

спасибо за ответ. картина стала яснее, но всё таки...

просто читал статью про оптимизацию и ускорение кода и там было написано что вместо медленного

Код AS1/AS2:
var arr:Array = new Array();
лучше использовать

Код AS1/AS2:
var arr:Array = [];
вот и задумался.... а правильно(в смысле ускорения кода) ли я другие переменные объявляю?
может кто-то проводил тесты?

Старый 05.05.2012, 12:04
maxkar вне форума Посмотреть профиль Отправить личное сообщение для maxkar Найти все сообщения от maxkar
  № 4  
Ответить с цитированием
maxkar

Регистрация: Nov 2010
Сообщений: 497
Это называется "переменные экземпляров" вроде бы.

Ускорять код на микроуровне обычно никакого смысла не имеет. Ладно бы еще это были очевидные оптимизации вроде смены двух проходов по массиву на один. А здесь оптимизация совершенно не очевидна. И если инициализация принципиальна для оптимизации, для нее комментарий в коде должен быть оставлен. Иначе в процессе поддержки оптимизацию могут и удалить.

Кстати, а в статье не написано, что перед оптимизацией стоит произвести профилирование и определить, что же именно стоит оптимизировать? А в процессе разработки следует руководствоваться соображениями удобства сопровождения кода. Исходя из них и команды вырабатываются и конвенции для каждого отдельного проекта. Может, у вас будет принято вообще везде писать инициализаторы переменных в не зависимости от того, чем они инициализируются. Или явно все в конструкторе инициализировать, например.

Старый 05.05.2012, 13:11
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 5  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
не пойму когда их в нулл надо ставить сразу, а когда просто тип обозначить.
ActionScript3 - это не С и не С++. Тут переменной любого типа присваивается значение по умолчанию, а не мусор из памяти.

Переменной с типом Boolean присваивается по умолчанию false, int - 0, Number - NaN и т.д.
Поэтому как хотите (и как написано в вашем соглашении по кодированию) - так и делайте.

Код AS3:
private var vec1:Vector.<uint>;
private var vec2:Vector.<uint> = null;
private var vec3:Vector.<uint> = new Vector.<uint>;
Первые 2 строчки практически равнозначны. А вот третья координально различается по производительности - происходит динамическое выделение памяти под Vector.<uint> (с выполнением некоторых дополнительных операций). И если его не используете, а где-то создаете его ещё раз - то это выделение было напрасным.


Последний раз редактировалось expl; 05.05.2012 в 13:14.
Старый 05.05.2012, 14:16
СлаваRa вне форума Посмотреть профиль Отправить личное сообщение для СлаваRa Найти все сообщения от СлаваRa
  № 6  
Ответить с цитированием
СлаваRa
 
Аватар для СлаваRa

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
Нюанс по поводу:
Цитата:
Number - NaN и т.д.
если создать вектор типа Number и установить ему какую-либо длину, то он заполняется 0-ми, хотя в документации сказано, что он должен заполнится значениями по умолчанию.
__________________
местонахождение

Старый 05.05.2012, 16:04
billion вне форума Посмотреть профиль Отправить личное сообщение для billion Посетить домашнюю страницу billion Найти все сообщения от billion
  № 7  
Ответить с цитированием
billion

Регистрация: Jan 2002
Сообщений: 149
Отправить сообщение для billion с помощью ICQ
покритикуйте мой код пожалуйста

смысл в чём..... есть класс, в нём допустим 20 static переменных и 20 переменных экземпляров.

переменные экземпляров будут заполняться(присваиваться) не все. поэтому мне лучше всего их сразу в классе определить как пустые. приравниваю к null:

Код AS3:
private var vec1:Vector.<uint> = null;
private var _txt:String = null;
private var _id:String = null;
private var _lvl:int;
Вопрос: GC соберёт их, если на момент сборки они будут null? или экземпляр не изменяется коллектором?
ну а static сразу создаю:

Код AS3:
public static var txt2:String = '';
public static var dig:int=0;
public static var vec2:Vector.<uint> = new Vector.<uint>;
public static var vec3:Vector.<uint> = new Vector.<uint>;
public static var obj:Object = {};
кстати поясните плиз в чём разница и как выделяется память для
Код AS3:
var ob:Object = new Object();
и
Код AS3:
var ob:Object = {}


Последний раз редактировалось billion; 05.05.2012 в 16:06.
Старый 05.05.2012, 19:20
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 8  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
кстати поясните плиз в чём разница и как выделяется память для
Код AS3:
var ob:Object = new Object();
и
Код AS3:
var ob:Object = {}
Да, я тоже не понимаю откуда разница во времени создания new Array() против [] и new Object() против {}
Разницы в производительности при их использовании после создания не обнаружено (но, создаётся через new раза в 3 медленнее)

В as1/as2 было более-менее понятно: на созданном через [] массиве методы push() и pop() работали в разы медленнее, чем на массиве new Array(), хотя сам массив создавался быстрее.

Цитата:
Вопрос: GC соберёт их, если на момент сборки они будут null? или экземпляр не изменяется коллектором?
ну а static сразу создаю:
Поле объекта это ссылка, в нём самом ничего не лежит, оно весит где-то 4 байта, оно не может быть собрано, эти 4 байта уйдут из памяти, когда уберут объект, которому принадлежит поле.

Объекты лежат в динамической памяти и на один и тот же объект может ссылаться куча переменных
И вот GC будет помечать эту память как свободную, только когда этих ссылок не останется


Последний раз редактировалось expl; 05.05.2012 в 19:30.
Создать новую тему Ответ Часовой пояс GMT +4, время: 19:35.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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