![]() |
Строгая типизация данных. Как правильно писать код?
Здравствуйте. Так-уж вышло, что со строгой типизацией данных столкнулся только при изучении as3. Отсюда есть сомнения по правильности их использования в некоторых моментах. Приведу пример:
Код AS3:
Варианты ответа :moder: : A) Изменить тип данных color:* B) Добавить флаг в класс empty:Boolean и делать проверку через флаг D) Ваш вариант ответа. |
Думаю флаг. Вариант В.
|
Если цвет не ARGB то можно использовать uint.MAX_VALUE (0xffffffff)
|
Цвет как раз ARGB и все значения uint заняты.
|
А я бы Number использовал бы, и не парился.
|
Цитата:
Есть еще варианты: каждый цвет хранить отдельно, в сеттер диспатчер запихнуть, сделать обязательным параметром в конструкторе и т.д. :) |
Код AS3:
|
Мне как раз не нужно выполнять никаких логик. Все что мне требуется это возвращать color либо как uint, либо как null.
Пока пришел к выводу, что этот вариант будет правильнее: Код AS3:
|
А что мешает использовать нормальное дефолтное значение?
Код:
public class MyObject { |
Так, по поводу private var color:int = -1; Отменяется =( uint диапозон больше, чем int.
2alexcon314 Проблема в том, что есть понятие пустота и что-то. В данном случае для color:uint = 0 в ARGB соответствует черный цвет с альфой 100%. |
Цитата:
|
Причем тут пустота?
Дефолтные значения как раз и призваны, чтобы не было никаких "пустот". Вы создаете объект с цветом по умолчанию, каким он будет, 0х000000 или 0х01ad45fe - это уж ваше дело. Если пользователь задавал цвет, отличный от дефлотного, то вы это увидите. Если важен именно сам факт изменеия, то в сеттере можно записывать предыдущие колоры в массив, к примеру, для отката, или эвент диспатчить или еще что-то.. помнится в АС была чудная фича Object.watch(), кажется.. Мне не понятно ваше стремление к пустоте :) |
Если из чисто абстрактных соображений (на практике я как-то тоже не сталкивался с необходимостью uint - null), то, можно сделать класс обертку для uint, скажем UInt и задать в нем константу (или много констант никак не трансформирующихся в uint, но тем не менее типа UInt, и потом все мат. операции проводить через myUInt.valueOf(), где:
Код AS3:
|
Цитата:
Ну вот допустим: Код:
<container1> |
Цитата:
Не вижу каких-то проблем. Пустоты с * в топку :). Впрочем, настаивать особо смысла тоже не вижу. Делайте как хотите. |
Ну так вам просто нужно зарегестрировать факт изменения цвета пользователем, а цвет не может быть "никаким", он как раз и должен быть в диапазоне от 0 до FFFFFFFF. T.e. в сеттере поставьте флаг который бы и оповещал о том, вывывался сеттер или нет. Но, по-моему, об этом уже было тут сказано...
|
Цитата:
Был ли изменен цвет - булевы данные. uint - другой тип данных. null - третий. Не надо пытаться в стандартном типе данных передать еще и другой тип. Измените свою логику. Чтобы передать цвет - uint. Чтобы передать, был ли он изменен - Boolean. И все встанет на свои места. Не пишите новый язык для своей программы. Пишите программу по законам выбранного языка. |
Возмите Number...
|
Цитата:
|
Не совсем понятно, причем тут строгая типизация...
Что касается заглавного поста, то лучше, имхо, в таких случаях использовать флажки. Потом в какой-то момент может потребоваться, чтобы переменная color была в начальный момент уже определена и в этом случае потребуется изменение условия проверки. Лишняя работа. Да и вообще, как показывает практика, лучше отделять фиксацию факта действия пользователя от фиксации результата его действия. |
| Часовой пояс GMT +4, время: 00:28. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.