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

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

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

Регистрация: Dec 2009
Сообщений: 48
По умолчанию Строгая типизация данных. Как правильно писать код?

Здравствуйте. Так-уж вышло, что со строгой типизацией данных столкнулся только при изучении 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 - которая хранит установленный пользователем цвет. И как правильно теперь поступить, если мне необходимо проверить - устанавливался-ли пользователем цвет?
Варианты ответа :
A) Изменить тип данных color:*
B) Добавить флаг в класс empty:Boolean и делать проверку через флаг
С) Изменить типа данных color:int и пустоту использовать, как -1
D) Ваш вариант ответа.


Последний раз редактировалось mexoboy; 19.02.2010 в 16:18.
Старый 19.02.2010, 12:28
proxiServer вне форума Посмотреть профиль Отправить личное сообщение для proxiServer Найти все сообщения от proxiServer
  № 2  
Ответить с цитированием
proxiServer
 
Аватар для proxiServer

Регистрация: Jun 2006
Сообщений: 400
Думаю флаг. Вариант В.

Старый 19.02.2010, 12:51
Партизан вне форума Посмотреть профиль Отправить личное сообщение для Партизан Найти все сообщения от Партизан
  № 3  
Ответить с цитированием
Партизан
 
Аватар для Партизан

блогер
Регистрация: Nov 2007
Адрес: Almaty, Moscow
Сообщений: 396
Записей в блоге: 5
Отправить сообщение для Партизан с помощью Skype™
Если цвет не ARGB то можно использовать uint.MAX_VALUE (0xffffffff)

Старый 19.02.2010, 13:02
mexoboy вне форума Посмотреть профиль Отправить личное сообщение для mexoboy Найти все сообщения от mexoboy
  № 4  
Ответить с цитированием
mexoboy

Регистрация: Dec 2009
Сообщений: 48
Цвет как раз ARGB и все значения uint заняты.

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

Регистрация: Sep 2009
Сообщений: 127
А я бы Number использовал бы, и не парился.

Старый 19.02.2010, 14:03
Партизан вне форума Посмотреть профиль Отправить личное сообщение для Партизан Найти все сообщения от Партизан
  № 6  
Ответить с цитированием
Партизан
 
Аватар для Партизан

блогер
Регистрация: Nov 2007
Адрес: Almaty, Moscow
Сообщений: 396
Записей в блоге: 5
Отправить сообщение для Партизан с помощью Skype™
Цитата:
Сообщение от mexoboy Посмотреть сообщение
Цвет как раз ARGB и все значения uint заняты.
Ну если так важно знать о изменении тогда вариант B.
Есть еще варианты:
каждый цвет хранить отдельно,
в сеттер диспатчер запихнуть,
сделать обязательным параметром в конструкторе
и т.д.

Старый 19.02.2010, 14:58
ulik вне форума Посмотреть профиль Отправить личное сообщение для ulik Посетить домашнюю страницу ulik Найти все сообщения от ulik
  № 7  
Ответить с цитированием
ulik
 
Аватар для ulik

Регистрация: Apr 2007
Адрес: Moscow city
Сообщений: 286
Отправить сообщение для ulik с помощью ICQ
Код 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
        }
}
* = зло
__________________
Дизайн, как презерватив - каждому жмет по-своему © Я
мое: блог форум

Старый 19.02.2010, 15:48
mexoboy вне форума Посмотреть профиль Отправить личное сообщение для mexoboy Найти все сообщения от mexoboy
  № 8  
Ответить с цитированием
mexoboy

Регистрация: Dec 2009
Сообщений: 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;
	}
}

Старый 19.02.2010, 16:00
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 9  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
А что мешает использовать нормальное дефолтное значение?
Код:
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){
//  ...
}
и никаких *.


Последний раз редактировалось alexcon314; 19.02.2010 в 16:02.
Старый 19.02.2010, 16:10
mexoboy вне форума Посмотреть профиль Отправить личное сообщение для mexoboy Найти все сообщения от mexoboy
  № 10  
Ответить с цитированием
mexoboy

Регистрация: Dec 2009
Сообщений: 48
Так, по поводу private var color:int = -1; Отменяется =( uint диапозон больше, чем int.

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

Создать новую тему Ответ Часовой пояс GMT +4, время: 01:49.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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