PDA

Просмотр полной версии : Логическое Not ! и ноль


Thanx7
27.11.2007, 18:27
Можно сказать, что

!(0) == true

а

!(n) == false, где n - любое число, кроме нуля.

Так? Всё правильно?

CrazyFlasher
27.11.2007, 18:42
а функией trace() не пробовали пользоваться?

Thanx7
27.11.2007, 21:09
Пробовал

trace(!(0));
trace(!(1));
trace(!(-1));

true
false
false

Просто не верится. Не знал, что логическое отрицание нуля - даёт значение "истина".

Fernando Costa
27.11.2007, 21:13
вполне очевидно что:
не(неправда) == правда

;)

etc
27.11.2007, 22:42
Пробовал

trace(!(0));
trace(!(1));
trace(!(-1));

true
false
false

Просто не верится. Не знал, что логическое отрицание нуля - даёт значение "истина".
Ноль при переводе в булево выражение дает «false», оператор отрицания возвращает true. В чем проблема?

wvxvw
27.11.2007, 22:42
Это АС2 насильно конвертит Number в Boolean, иногда очень удобно, а иногда дико мешает. Чтобы проверить, не является ли аргумент числом лучше пользоваться isNaN()

etc
27.11.2007, 22:43
Это АС2 насильно конвертит Number в Boolean, иногда очень удобно
Всегда удобно.

wvxvw
27.11.2007, 22:53
Мне, иногда нужно, чтобы и 0 тоже считался за true, мне было бы удобнее, если бы я сам себе мог настраивать правила конвертации числа в булевое значение =) (Очень часто хочется, чтобы, например, <0 считалось за false, а >=0 за true, избавило бы от лишней операции %)

etc
27.11.2007, 22:54
Собственно, >= и есть решение.

iNils
27.11.2007, 23:00
function isLess (val) {
return Boolean (Math.max (val + 1, 0));
}
trace (isLess (2));
trace (isLess (1));
trace (isLess (0));
trace (isLess (-1));
trace (isLess (-2));

wvxvw
27.11.2007, 23:01
Ок, другой пример: %)

function a(){
var _a = arguments[0] || 1;
}
Ну, вот ноль никак переменной в таком раскладе не присвоишь, приходится писать длиннее %)

Я же не говорю, что нет решения %) оно конечно же есть =))) ну. только хочется иногда писать меньше =) (лентяй я :P)

iNils
27.11.2007, 23:01
Надо +1 сделать.

wvxvw
27.11.2007, 23:08
function a(){
var _a = arguments[0]+1 || 1;
_a--;
}
Но это уже как минимум 8 лишних знаков! %)

iNils
27.11.2007, 23:15
function isLess () {
var _a = arguments[0];
return (_a == undefined ? 10 : _a);
}
trace (isLess (2));
trace (isLess (1));
trace (isLess (0));
trace (isLess (-1));
trace (isLess (-2));
trace (isLess ());
про знаки не смеши

wvxvw
27.11.2007, 23:50
Ок, давайте посмотрим на вопрос шире %)
Возможно ли вообще как-то повлиять на то, каким образом Флеш конвертит типы один в другой?
Ну, вот не важно зачем, но вот хочется мне, чттобы выражение типа
Number("hi!") возвращало Number.POSITIVE_INFINITY =) Возможно ли такое?

CrazyFlasher
27.11.2007, 23:55
ерундой какой-то страдаете...есть правила...надо им придерживаться...в математике вы же не пытаетесь изменить аксиому о параллельных прямых и о том что на ноль делить нельзя...смысл тут тогда это делать? придумайте свою дискретную математику, постройте компьютер на её основе, напишите свой язык программирования...вот вам и простое решение проблемы :D

iNils
27.11.2007, 23:58
А расширить Number лень?

wvxvw
28.11.2007, 00:10
Я понимаю, что можно найти кучу отмазок, почему этого не нужно делать, но вот хочется, и все тут %)
Не хочу расширять Number, хочу, чтобы все мои Number'ы так себя вели. =)
Я не знаю, может. большой практической пользы от этого не будет, но все равно интересно %) Хотя, вот, например, хочу добавить вариативность к конструктору Number, на манер, как это есть у Array.
вот, чтобы Number(256,2,3) выдавал в итоге 0xffffff =)
Или, вот, куда более прозаический вариант! Number("red") = 0xff0000; :]

iNils
28.11.2007, 00:30
Это уже капризы пошли.

wvxvw
28.11.2007, 00:37
Ну... я бы не сказал... вот, представь, какая-то CMS-ка сгенерила простенькую текстовую страничку и использовала при ее создании вполне себе стандартные возможности типа style='p{color:red}' И все бы было почти замечательно, но вот, млин, флеш не поймет, что red == 0xff0000, и совсем другое значение туда подставит =)
Можно, конечно, на этапе париснга полученного текста\CSS'а это заменить, но ведь на сколько удобнее было бы добавить Number'у еще десяток констант!

iNils
28.11.2007, 00:41
Я несколькими постами выше сказал про расширение класса, ну или не расширение, а композицию, зависит от задача. Но факт в том, что нужно писать свой класс. Вообще-то классы для того и пишут, чтобы они делали так, как тебе нужно.
Если ты задаешь в cms color:red, значит напиши обработчик который, не напрямую передает стиль, а сначала его парсит и подставляет то, что тебе нужно.

wvxvw
28.11.2007, 00:49
Ладно, не хотите заморачиваться - как хотите, я же не требую ничего =)
Мне просто интересно (пошел дальше пробовать =)