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

mexoboy 19.02.2010 12:21

Строгая типизация данных. Как правильно писать код?
 
Здравствуйте. Так-уж вышло, что со строгой типизацией данных столкнулся только при изучении as3. Отсюда есть сомнения по правильности их использования в некоторых моментах. Приведу пример:

Код AS3:

public class MyObject {
        private var color:uint;
 
        public function MyObject(){}
 
        public function get value():*
        {
                return color;
        }
 
        public function set value(val:uint):void
        {
                color = val;
        }
}

В данном классе есть переменная color:uint - которая хранит установленный пользователем цвет. И как правильно теперь поступить, если мне необходимо проверить - устанавливался-ли пользователем цвет?
Варианты ответа :moder: :
A) Изменить тип данных color:*
B) Добавить флаг в класс empty:Boolean и делать проверку через флаг
С) Изменить типа данных color:int и пустоту использовать, как -1
D) Ваш вариант ответа.

proxiServer 19.02.2010 12:28

Думаю флаг. Вариант В.

Партизан 19.02.2010 12:51

Если цвет не ARGB то можно использовать uint.MAX_VALUE (0xffffffff)

mexoboy 19.02.2010 13:02

Цвет как раз ARGB и все значения uint заняты.

ratin 19.02.2010 13:28

А я бы Number использовал бы, и не парился.

Партизан 19.02.2010 14:03

Цитата:

Сообщение от mexoboy (Сообщение 887866)
Цвет как раз ARGB и все значения uint заняты.

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

ulik 19.02.2010 14:58

Код AS3:

public class MyObject {
        private var color:uint;
 
        public function MyObject(){}
 
        public function get value():uint
        {
                return color;
        }
 
        public function set value(val:uint):void
        {
                color = val;
                colorChanged();
        }
        private function colorChanged():void
        {
                // your logic
        }
}

* = зло

mexoboy 19.02.2010 15:48

Мне как раз не нужно выполнять никаких логик. Все что мне требуется это возвращать color либо как uint, либо как null.
Пока пришел к выводу, что этот вариант будет правильнее:
Код AS3:

public class MyObject {
        private var color:int = -1;
 
        public function MyObject(){}
 
        public function get value():*
        {
                return color === -1 ? null : color;
        }
 
        public function set value(val:uint):void
        {
                color = val;
        }
}


alexcon314 19.02.2010 16:00

А что мешает использовать нормальное дефолтное значение?
Код:

public class MyObject {
private const DEFAULT_COLOR:uint = 0;
...
public function MyObject(){
color = DEFAULT_COLOR;
}
public function get value():uint
{
    return color;
}
public function set value(val:uint):void
{
  if(val == DEFAULT_COLOR)return;// если хотите, толко это несколько нелогично
        color = val;
}
}
// снаружи
if(myobj.color == myobj.DEFAULT_COLOR){
//  ...
}

и никаких *.

mexoboy 19.02.2010 16:10

Так, по поводу private var color:int = -1; Отменяется =( uint диапозон больше, чем int.

2alexcon314
Проблема в том, что есть понятие пустота и что-то. В данном случае для color:uint = 0 в ARGB соответствует черный цвет с альфой 100%.


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

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