Форум 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=139199)

maycry 25.04.2010 19:50

Организация хранилища констант
 
Здравствуйте, нуждаюсь в совете по такому вопросу. В моем проекте необходимо место для хранения определённых констант (масс, радиусов, скоростей различных космических тел). Хотелось бы узнать как организовать такое хранилище, что бы доступ к нему имелся из любого класса, например в виде такой конструкции Astro.Sun.Radius (доступ к значению радиуса Солнца), как это организовано с классом Math, когда вводя Math.PI получаю доступ к значению числа Пи. Заранее спасибо.

BlooDHounD 25.04.2010 19:56

static

Bgg 25.04.2010 19:58

Гляньте исходный код Math и увидите:
Код AS3:

package
{
        /// The Math class contains methods and constants that represent common mathematical functions and values.
        public class Math extends Object
        {
                ...
                public static const PI : Number;
                ...
        }
}

В вашем случае будет
Код AS3:

package
{
        public class Sun extends Object
        {
                ...
                public static const RADIUS : Number;
                ...
        }
}


maycry 25.04.2010 20:41

Спасибо большое. Сделал. Всё работает. Посмотрел по вашему совету класс Math и немного растерялся. Там объявляются только константы и функции. А где собственно хранятся тела функций и значения констант, и что это за конструкция
Код AS3:

intrinsic class Math{
...
}


wvxvw 25.04.2010 20:49

То, что вы возможно увидели - это intrinsic класс, т.е. не настоящий, а только для автокомплита, например. Настоящий класс написан на C или может быть C++ и исходников его в публичном доступе либо нет, либо надо смотреть исходники Тамарина, может там и есть.

maycry 25.04.2010 20:51

Все понял, спасибо.

BlooDHounD 25.04.2010 21:07

wvxvw, класс вполне себе настоящий =) просто это интерфейс для сишных методов. иногда в них бывает и код.

mikhailk 25.04.2010 22:02

Я параметры и константы храню в файле GlobalParameters.as в корневом каталоге:

Код AS3:

package {
    public var GlobalParameters:Object  = {
                                                param1:"value1",
                                                param2:"value1",
                                                param3:"value1",
                                                param4:"value1",
                                                param5:"value1"
                                        };
}

Доступ из любого класса приложения GlobalParameters.param1, GlobalParameters.param2 и т.д.

mickfallout 25.04.2010 22:10

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

Добавлено через 13 минут
И автокомплит не будет работать, короче ужас, имхо. По моему лучше хранить константы в тех классах к которым они относятся. В виде статических констант. Это кроме всего прочего ещё и быстрее работать будет.

wvxvw 25.04.2010 23:48

BlooDHounD: интерфейс это настоящий класс?

mickfallout: статик не нужен, но GlobalParameters действительно не будет константой, равно как и его ключи. Что касается констант в AS вообще, то, скажем так, они вобщем-то по поведению не константы, т.как они ссылки, а не значения. Т.е. при компиляции упоминания строковых констант не заменяется строками-значениями. Кроме того класс Class динамический, поэтому доступ к его свойствам немного медленнее, чем доступ к свойствам не динамических объектов.

BlooDHounD 25.04.2010 23:55

да. настоящий. он лежит в abc вшитом в ФП.

wvxvw 25.04.2010 23:58

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

mikhailk 26.04.2010 00:02

Ну не знаю.
Предложенную мной конструкцию изобрел не я. :)
Относительно того работает/не работает - работает без проблем.

По скорости доступа - да, по идее должно быть медленнее. Но мне не заметно.

Константы или нет - в строгом смысле, очевидно, нет.
А в чем проблема? Хочет быть уверенным, что свой собственный код не меняет значения констант?

mickfallout 26.04.2010 00:08

Цитата:

Сообщение от wvxvw (Сообщение 903519)
mickfallout: статик не нужен

точно. непривычно что в as файле не класс. я думал так писать не принято. FlashDevelop например глобальные функции( вроде так называются функции описанные в отдельном файле?) автокомплитом не видит, и это хранилище не увидит(проверил). Но работать конечно будет....

Цитата:

Сообщение от wvxvw (Сообщение 903519)
Что касается констант в AS вообще, то, скажем так, они вобщем-то по поведению не константы, т.как они ссылки, а не значения.

Я имел в виду защиту от изменения.

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

Сообщение от mikhailk (Сообщение 903526)
А в чем проблема? Хочет быть уверенным, что свой собственный код не меняет значения констант?

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

wvxvw 26.04.2010 00:15

Не, глобальные функции - это те, которые лежат в безымянном пакете, и ФД по-идее их должен видеть... но в любом случае, это не самая лучшая практика, пример - тот же navigateToURL - результатом его вызова может оказаться событие ИО ошибки, а подписаться на него не у кого... хотя, для таких вещей, как просто мат. константы, это вроде как нормальный подход.

BlooDHounD 26.04.2010 00:21

wvxvw, navigateToURL глобальный или нет по твоей логике? просто он лежит в flash.net =)

wvxvw 26.04.2010 00:25

Цитата:

Сообщение от wvxvw (Сообщение 903534)
Не, глобальные функции - это те, которые лежат в безымянном пакете

Давай не будем...

BlooDHounD 26.04.2010 00:27

wvxvw, давай. тогда navigateToURL не глобальная?


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

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