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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 31.01.2007, 16:58
firelord вне форума Посмотреть профиль Отправить личное сообщение для firelord Найти все сообщения от firelord
  № 1  
Ответить с цитированием
firelord

Регистрация: Nov 2006
Сообщений: 85
По умолчанию на фига козе баян или зачем флешу type hint?

Все больше к сожалению убеждаюсь, что флеш с трудом годится для разработки полноценных приложений.

В частности, сломал себе мозг, пытаясь понять, почему не работает одна функция, например:
Код:
function foo(left:Number,width:Number) {
     return left+width;
}
//обратите внимание на тип параметров

var _xml=new XML();
_xml.parseXML("<foo left=\"1\" width=\"5\"/>");
//в реальности, конечно, xml грузится снаружи...

var node=_xml.childNodes[0];
trace(node.attributes.left+","+node.attributes.width);
//вы удивитесь, но left действительно = 1, а width = 5

trace(foo(node.attributes.left,node.attributes.width));
//что вы ожидаете увидеть тут? 6? наивные! 15! :)))
несмотря на то, что параметры функции объявлены как Number, флеш без зазрения совести засовывает в них String из XML - ни на что, конечно, не ругаясь, и успешно осуществляет конкатенацию строк вместо арифметической операции

первый вопрос - риторический: на фига тогда вообще type hinting флешу, если он не может самостоятельно элементарной операции приведения типов выполнить?

и теперь вопрос ПО СУЩЕСТВУ: понимаю, что мои замашки программера тут явно не к месту - как вообще принято такие вещи писать на ActionScript - "правильно" с точки зрения флеша? или надо каждый раз внутри функции принудительно приводить тип?

З.Ы. кстати, а как тип вообще приводить?

Старый 31.01.2007, 17:01
firelord вне форума Посмотреть профиль Отправить личное сообщение для firelord Найти все сообщения от firelord
  № 2  
Ответить с цитированием
firelord

Регистрация: Nov 2006
Сообщений: 85
приведение типа нашел. все функции теперь расширять?

Старый 31.01.2007, 17:11
__i вне форума Посмотреть профиль Отправить личное сообщение для __i Найти все сообщения от __i
  № 3  
Ответить с цитированием
__i
 
Аватар для __i

Регистрация: Jan 2004
Адрес: Украина, Харьков
Сообщений: 1,524
Отправить сообщение для __i с помощью ICQ
Все. Строку всегда нужно приводить к числу. Во флеше есть такая фигня как(незнаю как научно называется) изменение типа переменой в зависимости от его содержимого.
Ты свободно можешь написать;
var a : Number = 123;
a='ioweoipewqowqoip'
__________________
33 коровы

Старый 31.01.2007, 17:24
CorC вне форума Посмотреть профиль Отправить личное сообщение для CorC Найти все сообщения от CorC
  № 4  
Ответить с цитированием
CorC
 
Аватар для CorC

Регистрация: Jul 2006
Адрес: Земля>Россия>Вологда
Сообщений: 3,056
Отправить сообщение для CorC с помощью ICQ Отправить сообщение для CorC с помощью MSN Отправить сообщение для CorC с помощью Skype™
Код:
function foo(left:Number,width:Number):Number {
     return left+width;
}
foo(Number(a),Number(b));
проблем ранее тахих не было
либо NaN либо число 3 не дано
__________________
"We Are The Champions My Friends!" Queen

Старый 31.01.2007, 17:39
firelord вне форума Посмотреть профиль Отправить личное сообщение для firelord Найти все сообщения от firelord
  № 5  
Ответить с цитированием
firelord

Регистрация: Nov 2006
Сообщений: 85
не, ну что делать - понятно, я думал, может есть какой-нибудь ИЗЯЩНЫЙ способ спасибо!

Старый 31.01.2007, 18:15
CorC вне форума Посмотреть профиль Отправить личное сообщение для CorC Найти все сообщения от CorC
  № 6  
Ответить с цитированием
CorC
 
Аватар для CorC

Регистрация: Jul 2006
Адрес: Земля>Россия>Вологда
Сообщений: 3,056
Отправить сообщение для CorC с помощью ICQ Отправить сообщение для CorC с помощью MSN Отправить сообщение для CorC с помощью Skype™
изящный способ всегда везде строго тип соблюдать и все
изящнее не бывает
__________________
"We Are The Champions My Friends!" Queen

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

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
Код:
function foo (a:Number, b:Number) {
	return a + b;
}

//// false
//trace (foo ("1", "1"));

//// true
//a = "1";
//b = "1";
//trace (foo (a, b));

//// false
//var a:Number = "1";
//var b:Number = "1";
//trace (foo (a, b));
Три примера. По очереди расскомментарьте каждый и посмотрите реакцию флеша. true - когда флеш не ругается. false когда ругается.
Почему в первом примере у нас ошибка, а во втором нет?
Потому, что в первом мы отдаем непосредственно сами значения. А во втором переменные, тип которых мы не определили. А как известно, тип во флеше играет роль только при компиляции, а не во время исполения и флеш также как и раньше производит автоматическое преобразование типов. Это лекго проверить с помощью
Код:
function foo (a:Number, b:Number) {
	return a * 1 + b * 1;
}

a = "1";
b = "1";
trace (foo (a, b));
На выходе мы получаем 2, а не "11"
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 31.01.2007, 18:45
firelord вне форума Посмотреть профиль Отправить личное сообщение для firelord Найти все сообщения от firelord
  № 8  
Ответить с цитированием
firelord

Регистрация: Nov 2006
Сообщений: 85
спасибо! достаточно развернутый комментарий - и главное - ответ на главный вопрос - "зачем флешу type hinting?" - для устранения ошибок на стадии компиляции

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

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

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


 


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


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