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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 26.05.2010, 17:06
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 11  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
mtasc выдает
Код AS1/AS2:
trace( "ABC" == 0 ); // false
trace( "ABC" < 0 ); // undefined
trace( "ABC" > 0 ); // undefined
trace( "ABC" >= 0 ); // true
trace( "ABC" <= 0 ); // true
т.е. все как iNils сказал

IDE-шный компилятор для >= и <= дает тоже undefined (т.е. невыполнимость опреации, а вовсе не false),
можно предположить, что выполнение прерывается на стадии lt/gt без выполнения not


Последний раз редактировалось silin; 26.05.2010 в 17:09.
Старый 26.05.2010, 17:17
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 12  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Если посмотреть на байткод который выдал компилятор ide
Код:
push FALSE

push UNDEF

push UNDEF

push UNDEF

push UNDEF
то видно, что на стадии компиляции произошло сравнение с данными и был записан уже результат, то есть была оптимизация кода.
Вот если бы вы написали
Код AS1/AS2:
var s:String = "ABC"
trace( s == 0 ); // false
trace( s < 0 ); // undefined
trace( s > 0 ); // undefined
trace( s >= 0 ); // true
trace( s <= 0 ); // true
то и результат был бы другой.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 26.05.2010, 17:27
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 13  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
Цитата:
Сообщение от iNils Посмотреть сообщение
Код:
trace( _root >= 0 ); // true _root > 0 || _root ==0 - undefined || false - не очень ок
Операция >= состоит из двух действий greaterThan и not, в рузльтате greaterThan дает undefined, а отрицания undefined дает true.
Ага, понятно. Ну вот тут то и косяк, мой вариант разложения по логике должен давать тот же результат, что и твой. Конечно, не стоит сравнивать тёплое с мягким, но один фиг - расходится.

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

блогер
Регистрация: Sep 2009
Сообщений: 309
Записей в блоге: 4
Отправить сообщение для AzagThoth с помощью ICQ
Чем не устраивает isNaN
Зачем городить сравнения вообще.
__________________
Играй. Это жизнь.
Всё повторяется. Играй.

Старый 28.05.2010, 17:56
camelot вне форума Посмотреть профиль Отправить личное сообщение для camelot Найти все сообщения от camelot
  № 15  
Ответить с цитированием
camelot

Регистрация: Jul 2006
Сообщений: 26
Цитата:
Сообщение от AzagThoth Посмотреть сообщение
Чем не устраивает isNaN
Зачем городить сравнения вообще.
вот вы везде везде где у вас переменная Number прежде чем её использовать вы проверяете её isNaN и ещё наверное проверяет её тип typeof и чтобы быть 100% увереным ещё и instanceof Number и чтобы добить до конца parseInt, да?

бывает случаи когда переменная не инициализирована или другого типа и получается так, что это приводит к очень печальным последствиям.
например при восходящем или нисходящем приведении типа когда ссылка на мувиклип или объект превращается в undefiened или null. а если вы ещё и работаете с динамическими данными и трудно поймать такое условие - вам будет стоить громадных усилий и времени поймать в чем проблема.

например:

Код AS1/AS2:
class A
{
   public var testVar:Number = 10;
}
 
var mc:MovieClip = attachMovie("AfromLibrary", "instanceOfA", 0); // или createEmptyMovieClip("instanceOfA", 0) - кому как нравится
mc.__proto__ = A.prototype;
var instA:A = A(mc);
var resultValue:Number = instA.testVar + 10;
if (resultValue:Number >= 0 )
{
  trace("all ok");
}
else
{
  unloadMovie(_level0);
}
а всего то ошибка class A extends MovieClip.
в результате cтроки:
Код AS1/AS2:
var instA:A = A(mc); //instA = null
var resultValue:Number = instA.testVar + 10; // resultValue = NaN
if (resultValue >= 0 ) // читайте выше, что даёт NaN >= 0


з.ю. ради бога, не придирайтесь к примеру. выдумал по быстрому

Старый 28.05.2010, 18:03
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 16  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Смысла ругать avm1 уже нет, ее развитие остановлено. А AS3 существует уже не первый год.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

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

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

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


 


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


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