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

Tr1te 26.03.2010 20:54

Для чего задавать тип данных, при создании инстанса класса?
 
Чем отличается?
Код AS3:

var myClass_Provider=new myClass;

и
Код AS3:

var myClass_Provider:myClass=new myClass;


udaaff 26.03.2010 21:32

На сколько я понимаю, это нужно компилятору, работающему в strict mode.

expl 26.03.2010 23:37

Если на AS3 этого не сделать - будет тип *, или Object - он мало того, что не проеряется компилятором - еще и работает медленне

Но вообще в природе существует механизм выявления типов компилятором
Например, если в haXe напишешь
Код AS3:

var myClass_Provider=new myClass();

то тип переменной будет именно myClass и проверяться комилятором будет, и даже флеш-девелоп автокомплит покажет (не всегда правда, под хакс он слабо заточен)
Говорят в C# тоже что-то похожее добавили (объявление переменной с ключевым словом var и автоопределением типа)

Но есть случаи, когда тип писать нужно, например, чтобы обрезать до интерфейса/более общего типа:
Код AS3:

var myClass_Provider:IProvider = new myClass();


Bgg 27.03.2010 00:20

Пишу код в FD, если не писать тип, то придется вручную набирать публичные методы и свойства класса, лень.

wvxvw 27.03.2010 02:10

Bgg - expl про HaXe говорил. HaXe != AS
FD кстати делает кой-какое инвертирование типов для AS2... но там так, ерунда...
По поводу var в C# - угу, есть такое, но я не уверен в том, что это инвертация...

mikhailk 27.03.2010 10:33

Не знаю, замедления я не заметил.
Однако, если не указывать тип явно, то в некоторых случаях компилятор выдаст ошибку, поскольку просто не найдет соответствующих объекту публичных методов.

Кстати, иногда наблюдаю обратную картину, когда отказ от явного указания типа облегчает жизнь. Хотя это и не слишком корректно, пожалуй, с технологической точки зрения.

iNils 27.03.2010 11:37

Цитата:

Не знаю, замедления я не заметил.
Разницу в скорости между пулей из пистолета и винтовки тоже не заметна, но она есть.

Цитата:

Кстати, иногда наблюдаю обратную картину, когда отказ от явного указания типа облегчает жизнь.
Это когда же?

mikhailk 27.03.2010 12:39

Например, некий обработчик получает на вход событие с данными.

Код AS3:

private function myProcessCompliteHandler(e:MyDataEvent) {
  var processResult = e.data.process.result;
}

Можно кинуть ему xml, а можно запихать в данные process = { "result" : "tru-la-la" }
Не вижу, что мы выиграем, установив для processResult конкретный тип.

wvxvw 27.03.2010 13:18

Выиграете то, что когда вы потом попробуете processResult.@foo вас встретит ошибка времени исполнения, а в вашем дурно пахнущем коде понять почему она случилась будет нереально изза таких вот "улучшений".

Tr1te 27.03.2010 13:21

Подводя итог, я так понял что все дело в замедлении работы с типом *.


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

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