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

Партизан 19.02.2010 16:10

Цитата:

Сообщение от alexcon314 (Сообщение 887914)
А что мешает использовать нормальное дефолтное значение?

Я так понимаю мешает такое равенство 0x00000000 === 0 :)

alexcon314 19.02.2010 16:34

Причем тут пустота?
Дефолтные значения как раз и призваны, чтобы не было никаких "пустот".
Вы создаете объект с цветом по умолчанию, каким он будет, 0х000000 или 0х01ad45fe - это уж ваше дело. Если пользователь задавал цвет, отличный от дефлотного, то вы это увидите. Если важен именно сам факт изменеия, то в сеттере можно записывать предыдущие колоры в массив, к примеру, для отката, или эвент диспатчить или еще что-то.. помнится в АС была чудная фича Object.watch(), кажется..
Мне не понятно ваше стремление к пустоте :)

wvxvw 19.02.2010 16:52

Если из чисто абстрактных соображений (на практике я как-то тоже не сталкивался с необходимостью uint - null), то, можно сделать класс обертку для uint, скажем UInt и задать в нем константу (или много констант никак не трансформирующихся в uint, но тем не менее типа UInt, и потом все мат. операции проводить через myUInt.valueOf(), где:
Код AS3:

public function valueOf():Object
{
if (this === UInt.NULL) throw NullUintError;
return this._value;
}

Но, для решения практических задач я бы так не делал. Дефолтное значение - лучше.

mexoboy 19.02.2010 16:56

Цитата:

Причем тут пустота? Дефолтные значения как раз и призваны, чтобы не было никаких "пустот".
Это не дефолтное значение - это просто определение var colot:uint; Я не преследую целей устанавливать каких-то значений по умолчанию, т.к. "значения по умолчанию" наследуются от родителя. А вот самой проверки перед наследованием я не могу сделать - т.к. мне возвращается 0 - что соответствует 0x00000000 - не самому редкому в использовании цвету =)

Ну вот допустим:
Код:

<container1>
        <container2>
                <container3>
                </container3>
        </container2>
</container1>

Есть класс Контейнер. В нем есть методы установки и получения параметра color - который возвращается в uint либо как null. Хочу узнать значение в контейнере3 и если он null попросить вернуть color от родительского контейнера и так, пока родители типа Контейнер не закончатся.

alexcon314 19.02.2010 17:12

Цитата:

"значения по умолчанию" наследуются от родителя
Каламбур: "значения по умолчанию" наследуются по умолчанию от родителя по умолчанию.
Не вижу каких-то проблем. Пустоты с * в топку :). Впрочем, настаивать особо смысла тоже не вижу. Делайте как хотите.

wvxvw 19.02.2010 17:24

Ну так вам просто нужно зарегестрировать факт изменения цвета пользователем, а цвет не может быть "никаким", он как раз и должен быть в диапазоне от 0 до FFFFFFFF. T.e. в сеттере поставьте флаг который бы и оповещал о том, вывывался сеттер или нет. Но, по-моему, об этом уже было тут сказано...

Wolsh 19.02.2010 19:25

Цитата:

Есть класс Контейнер. В нем есть методы установки и получения параметра color - который возвращается в uint либо как null.
Да? Любопытно.. Параметр Вы тоже принимаете как * ?
Был ли изменен цвет - булевы данные. uint - другой тип данных. null - третий. Не надо пытаться в стандартном типе данных передать еще и другой тип. Измените свою логику. Чтобы передать цвет - uint. Чтобы передать, был ли он изменен - Boolean. И все встанет на свои места. Не пишите новый язык для своей программы. Пишите программу по законам выбранного языка.

Партизан 21.02.2010 12:44

Возмите Number...

TERRORist 21.02.2010 13:17

Цитата:

Сообщение от mexoboy (Сообщение 887916)
альфой 100%.

0% :taunt:

mikhailk 22.02.2010 23:18

Не совсем понятно, причем тут строгая типизация...

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

Да и вообще, как показывает практика, лучше отделять фиксацию факта действия пользователя от фиксации результата его действия.


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

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