Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как быть без структур? (http://www.flasher.ru/forum/showthread.php?t=155650)

Sharkow 07.05.2011 17:55

Как быть без структур?
 
Доброго времени.
Вопрос вот какой - нужно сделать файл (класс) с настройками для всего приложения.
При этом хочу, чтобы обращение к настройкам в итоге выглядело так:
Код AS3:

value = Preferences.preferencesGroup1.someValue;

То есть, чтобы в классе были группы настроек для каждого компонента в программе. Настройки какой-то панельки, например. А группа уже должна содержать все нужные значения - цвет панельки, размер и т.д.

Если бы в AS были структуры, можно было бы сделать статическую структуру для каждой группы, со всеми нужными значениями. А без этого не знаю, как написать. Вложенных классов нет. Можно было бы сделать пакет с настройками и создавать по отдельному классу для каждой группы, но это чересчур. Я хочу, чтобы всё было в одном файле, с intelliSense, все дела... Есть какое-то простое решение?

КорДум 07.05.2011 18:05

Код AS3:

public static var preferencesGroup1:Object = {
    someValue1: someValue,
    someValue2: someValue,
    ...
}


mikhailk 07.05.2011 18:05

Код AS3:

package  
{
        public class Preferences
        {
                public static var preferencesGroup1:XML=
                <preferencesGroup1>
                        <someValue>123</someValue>
                </preferencesGroup1>;               
        }
}


Sharkow 07.05.2011 18:22

Спасибо, но вот не зря написал про intelliSense. В этих случаях компилятор уже не видит, какие значения есть в объекте/узлы в XML. Придется без этого жить?

IntelliSense - это я про Code Completion.

gloomyBrain 07.05.2011 18:26

Цитата:

Вложенных классов нет
Цитата:

Можно было бы сделать пакет с настройками и создавать по отдельному классу для каждой группы, но это чересчур
А какая разница - будут они вложенными, или нет? Экономите место на жестком диске? =)
Тем более, что если говорить о C++, то не особо-то классы отличаются от структур.

ЗЫ
Насчет вложенных классов: Вы можете объявить несколько классов в одном AS файле, единственное НО состоит в том, что только один из этих классов может быть объявлен как public, остальные должны быть internal (или вообще без модификатора доступа, что по сути одно и то же).

Так что единственный способ работать с intelly sense - это плодить кучу классов, в одном или нескольких файлах

expl 07.05.2011 18:52

Цитата:

Если бы в AS были структуры, можно было бы сделать статическую структуру для каждой группы, со всеми нужными значениями. А без этого не знаю, как написать. Вложенных классов нет. Можно было бы сделать пакет с настройками и создавать по отдельному классу для каждой группы, но это чересчур. Я хочу, чтобы всё было в одном файле, с intelliSense, все дела... Есть какое-то простое решение?
Ну раз структура нужна статическая, какая разница будет она классом или структорой? И чем таким объявление класса в AS3 тяжелее объявления структуры в C++?
Код AS3:

package  
{
        public class Preferences
        {
                public static const preferencesGroup1:ReferenceGroup1 = new ReferenceGroup1();
 
                public static const preferencesGroup1:ReferenceGroup2 = new ReferenceGroup2();
        }
 
}
 
class ReferenceGroup1
{
        public var color:uint;
 
        public var indent:int;
}
 
class ReferenceGroup2
{
        public var color:uint;
 
        public var indent:int;
}

Цитата:

Настройки какой-то панельки, например. А группа уже должна содержать все нужные значения - цвет панельки, размер и т.д.
Чем панельки настраивать и плодить кучу копипасты по всему приложению с кодом их создания, может оказаться проще влепить статичные фабрики этих панелек (подход ни разу не правильный - все оказывается завязано на фабрику, но компонентам, которые впринципе нельзя использовать вне приложения можно разрешить пользоваться этой фабрикой):

Код AS3:

package  
{
        public class PanelFactory
        {
                public static function newDefaultPanel():PanelBase
                {
                        var panel:CustomizedPanel = new CustomizedPanel();
                        panel.bgColor = 0xff00ff;
                        panel.borderColor = 0xff0000;
                        ...
                        return panel;
                }
 
                public static function newDialogPanel():PanelBase
                {
                        var panel:CustomizedPanel = new CustomizedPanel();
                        panel.bgColor = 0xff0000;
                        ...
                        return panel;
                }
 
                public static function newButifulPanel():PanelBase
                {
                        var panel:ExtendedCustomizedPanel = new ExtendedCustomizedPanel();
                        panel.bgColor = 0xffffff;
                        ...
                        return panel;
                }
        }
 
}


gloomyBrain 07.05.2011 18:54

@expl
А у Вас при таком раскладе автокомплит показывает поля вложенных классов? у меня в FD - нет (да по идее и не должен нигде, кроме как внутри пакета с классом настроек). Та что я бы отдельными файлами делал

Sharkow 07.05.2011 18:57

gloomyBrain,
А да, в одном файле объявить несколько классов - это вполне подходит, только вот как сделать доступ к этим классам?
Код AS3:

package GalleryDraftPack
{
        public class SHPreferences{
                public static function get group1():Class{
                        return Group1;
                }
        }
}
 
internal class Group1{
        public static const...
}

Так, разумеется, не работает ни Code Completion, ни собственно программа, никому же извне не известно о классе Group1.

Цитата:

А какая разница - будут они вложенными, или нет? Экономите место на жестком диске? =)
Все настройки, по хорошему, должны быть в одном файле, а то и искать, и переносить как-то неудобно.

expl,
Во-первых, да, при Вашем подходе автокомплит работать не будет, а во-вторых, new тут совсем не к месту. Разве что синглтон делать...

Цитата:

Чем панельки настраивать и плодить кучу копипасты по всему приложению с кодом их создания, может оказаться проще влепить статичные фабрики этих панелек...
Совсем не то... Панелька-то, скорее всего, будет как раз одна. А вот параметры из файла настроек будут использоваться где угодно и как угодно.

expl 07.05.2011 19:07

Вложений: 1
Цитата:

Сообщение от gloomyBrain (Сообщение 994621)
@expl
А у Вас при таком раскладе автокомплит показывает поля вложенных классов? у меня в FD - нет (да по идее и не должен нигде, кроме как внутри пакета с классом настроек). Та что я бы отдельными файлами делал

Да, в FD вызывается, в FB не пробовал.

Цитата:

Во-первых, да, при Вашем подходе автокомплит работать не будет, а во-вторых, new тут совсем не к месту. Разве что синглтон делать...
1. Еще раз, автокомплит работает.
Вложение 26530
2. Синглтон? Зачем? Этот класс и так никто вне Preferences не сможет создать. Да и зачем ему быть одному? Вдруг у вас будут 2 или более групп с одинаковыми настройками?

Цитата:

public static function get group1():Class{
return Group1;
}
Клиенту настроек, я так понимаю нужны сами настройки на не класс, по которым они будут создавать свою личную группу настроек, или задумка сложнее чем просто набить одну точку доступа полями настроек с иерархической структурой?

mikhailk 07.05.2011 19:11

Цитата:

Все настройки, по хорошему, должны быть в одном файле, а то и искать, и переносить как-то неудобно.
Одним пакетом тоже неудобно?
Что мешает сделать пакет Preferences, а preferencesGroup1 - классом со статическими переменными в нем? И автокомплит работает. И преносить каталогом.

Добавлено через 6 минут
Цитата:

Да, в FD вызывается, в FB не пробовал.
Вообще-то, да. Вариант от expl рабочий. Автокомплит работает и файл один.


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

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