![]() |
вопрос о статических константах
Друзья!
У меня вопрос скорее общего методического плана, нежели практический. Я уже прилично кода написал, но никак не могу понять логику в вопросе использования статических или "обычных" констант. Смотрите, например, у меня есть класс, который принимает строковый идентификатор и выдаёт фразу. Фраз может быть несколько. Для этого предусмотрено 2 режима выдачи: обычный или случайный. В втором варианте массив предварительно перемешивается. Так вот, режим определяется константами: MODE_NORMAL и MODE_SHUFFLE, заявленными в классе LanguagePack. Сейчас я объявляю их статическими, и обращаюсь таким образом: Код AS3:
Код AS3:
|
Я б вообще тут сделал класс LanguageModes, в который положил бы
Код AS1/AS2:
Код AS3:
я думаю,что паблик статик статик делать лучше для таких констант. Так как они не зависят от конкретного экземпляра класса, неизменны и вечны. в общем, такой вид Код AS3:
|
Кстати. Можно как то обратиться к свойству xml, через string? Ну например есть такая строчка
<txt_name>Ваня</txt_name> Соответственно, получение этого свойства выглядит примерно так Код AS3:
Код AS1/AS2:
|
Godwarlock
а что, Код AS3:
|
Цитата:
Код AS3:
Цитата:
|
Цитата:
|
Цитата:
Цитата:
Пример, который я привёл в первом сообщении, наверное, не самый удачный, т.к. сам класс "статический", он не приспособлен для создания экземпляров. Но если взять мой любимый класс Character и свойство _gender, на счёт которых уже столько копий было сломано, но какую предпочесть конструкцию. Такую: Код AS3:
Код AS3:
|
ZergMaster
caseyryan Спасибо) Добавлено через 43 секунды Цитата:
|
Цитата:
Цитата:
|
еще неприятность что в экземпляре эти константы будут дублироваться для каждого Character,бесполезно отжирая память.
|
У меня тогда наверное уже совсем наивный вопрос. А когда вообще уместно использование констант экземпляров и уместно ли? Получается, что если возникает необходимость что-нибудь "отлить в граните" даже для использования экземпляром, то проще и правильнее создать константу на уровне класса как статическую. Или нет?
|
Публичных? Ни разу не встречал, ибо это бессмыслица.
Константа это то, что задается один раз. Соответственно, она не может быть разной у разных экземпляров, так как объявляется в теле Класса. Тогда какой смысл хранить ее в экземплярах, если она не может быть индивидуальной "экземпляровской"? |
Цитата:
Ещё есть устверждение, что обращение к константам проиходит быстрее, чем к переменным. Я встречал такое на некоторых форумах, особенно по JS, где есть куча любителей использовать const вместо var или let там где это вообще возможно. Но как по мне, так это довольно сомнительное утверждение, и лично я использую константы всегда только как статики. А если бы в as3 были enum'ы, то использовал бы их |
Wolsh, caseyryan, спасибо. Исчерпывающе.
Добавлено через 1 минуту Цитата:
|
Цитата:
|
Кроме того, статики выносят отдельным классом для логического объединения однотипных объектов.
Пример: в классе MouseEvent собраны события CLICK, MOUSE_OVER и тд. Затем этот класс группируется в пакет events с аналогичными классами: KeyboardEvents, TextEvent.. помимо специфичных методов и свойств, у каждого из них общий признак - хранение событийных констант. Иначе, если хранить константы CLICK, MOUSE_OVER в классе Mouse, что логически приходит на ум, тогда мы смешиваем котлеты и мухи. Так как класс Mouse задуман для манипуляций курсором мыши, его вынесли в пакет ui, события отделяются в свою логическую группу. Вся эта детализация приходит с возрастанием сложности проекта и построение "правильной" структуры, тоже не простая штука.. |
| Часовой пояс GMT +4, время: 19:16. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.