Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Логическое Not ! и ноль (http://www.flasher.ru/forum/showthread.php?t=104548)

Thanx7 27.11.2007 18:27

Логическое Not ! и ноль
 
Можно сказать, что

Код:

!(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

Цитата:

Сообщение от Thanx7
Пробовал

Код:

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

Цитата:

Сообщение от wvxvw
Это АС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

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


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

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