Форум 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)
-   -   Экземпляр класса (http://www.flasher.ru/forum/showthread.php?t=90858)

funkyDevil 19.01.2007 14:08

Экземпляр класса
 
Для объявления класса по идее надо использовать следующуюю конструкцию:
Код:

var mySomeThing:MyClass = new MyClass();
Но также работает и такая вот строчка:
Код:

var mySomeThing:Object = new MyClass();
Не возникнут ли какие-нибудь проблемы, если я буду использовать второй вариант?

CorC 20.01.2007 11:54

у меня не возникало даже если
Код:

var a=new MyClass();

etc 20.01.2007 14:03

CorC, потом возникнут :)
funkyDevil, ты не сможешь в таком случае использовать методы MyClass. Компилятор выдаст ошибку, что у объекта типа Object нет метода.

CorC 20.01.2007 14:06

да, а в чем возникнут? просто я так думаю тип резиновый и все...

etc 20.01.2007 14:20

Тип никакой, методов и свойств у переменной неизвестного типа нет. Во всяком случае ты не говоришь об этом компилятору, что они есть.

pkfun 20.01.2007 14:27

Насколько мне известно, тип Object присваивается объекту у которого не известный тип.

CorC 20.01.2007 14:30

ну я не говорю что их нет, но говорю зато потом какие они есть, и вызываю их, но левых никакий не вызываю, что нить помешает этому?

etc 20.01.2007 14:31

Мешает отладке в дальнейшем.

Kikasso 20.01.2007 14:49

Код:

var mySomeThing:Object  = new MyClass();
не имеет смысла. Это то же самое что
Код:

var mySomeThing = new MyClass();
Проблем не будет, пока в коде нет ошибок.
upd: CorC, спасибо поправил.

CorC 20.01.2007 15:12

что то одно и то же написано

etc 20.01.2007 15:42

Имелось ввиду без типизации. Без типизации, кстати, ещё хуже, чем с такой.

CorC 20.01.2007 15:52

но зато присваивание хуже будет проходить, если тип не будет в точности равен установленному,
хотя это и правильно, но что то я уже привык из числа строку получать...
надо бы отвыкать :)

Kikasso 20.01.2007 16:06

Цитата:

Сообщение от __etc
Имелось ввиду без типизации. Без типизации, кстати, ещё хуже, чем с такой.

Чем лучше-то? Что оно будет проверять?
Код:

var mySomeThing:Object = 1;
mySomeThing = function(){};
mySomeThing = "";


etc 20.01.2007 16:08

Ты имеешь права так делать только в AS1.

Проверять, оно, конечно ничего не будет, т.к. всё — наследники Object.

Kikasso 20.01.2007 16:27

Цитата:

Сообщение от __etc
Ты имеешь права так делать только в AS1.
Проверять, оно, конечно ничего не будет, т.к. всё — наследники Object.

Я так не пишу, я просто смоделировал "боевую ситуацию".
Вопрос остался - если проверять не будет, чем лучше?

etc 20.01.2007 16:35

Наличием знания у автора, что есть такая штука, как типизация.

pkfun 20.01.2007 16:50

Думаю, это лучше тем, что осознанно создавая такой объект(осознанно это подписывая к нему тип Object), вы для себя уже помечаете, что, мол, есть проблемный объект, который может вызвать скрытый сбой( без сообщения компилятора). И если у вас программа ведет себя непонятно, то вероятнее всего вы сначала проверите именно этот объект.
Потому что, если мы используем типизацию, то такой код:
Код:

var myObj:Number
trace(myObj.nextFrame());

выдаст такую ошибку:
Цитата:

**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 2: There is no method with the name 'nextFrame'.
trace(myObj.nextFrame());
А такой:
Код:

var myObj:Object
trace(myObj.nextFrame());

просто напишет undefined.

etc 20.01.2007 16:52

Тип Object присваивается для указания того, что это данные не простого типа (Number, String, Boolean), а всё-таки объект с заданными свойствами. Если не указывать вообще, то хрен его знает, что это такое, объект, число, строка, булево значение или ещё что-нибудь.

Kikasso 20.01.2007 16:54

Это придирки.
Если у меня есть проблеммный объект, я его помечаю примерно так
////////!!!!!!!!!!!!!!!!!!///////////
так по-моему проще заметить, а набрав в поиске !!! найти
Но я понимаю вашу позицию.

Kikasso 20.01.2007 16:58

Цитата:

Сообщение от __etc
Тип Object присваивается для указания того, что это данные не простого типа (Number, String, Boolean), а всё-таки объект с заданными свойствами. Если не указывать вообще, то хрен его знает, что это такое, объект, число, строка, булево значение или ещё что-нибудь.

Как раз присваивая тип Object мы и говорим что это хрен знает что такое.
Так что можно не позорится и не присваивать ничего вообще.
На скорость не влияет, на обработку ошибок тоже.

etc 20.01.2007 17:00

Цитата:

Сообщение от Kikasso
Как раз присваивая тип Object мы и говорим что это хрен знает что такое.

Объект — данные не простого типа. Даже если опираться на то, что все от него наследуется, это имеет другой смысл. Если же подразумевать под числами и строками объекты, то да — пофиг. Но тогда, как я уже говорил, разработчик не в теме. Считать объектом простые типы можно, но не стоит.

Kikasso 20.01.2007 17:06

Код:

var myObj:Object;
trace(myObj.nextFrame);
var fake;
trace( fake.nextFrame );
trace (fake.nextFrame === myObj.nextFrame);

И вы все еще утверждаете что это одно и то же?

CorC 20.01.2007 17:07

Цитата:

Сообщение от __etc
Считать объектом простые типы можно, но не стоит.

особенно это чревато последстиями при отладке чего нить

pkfun 20.01.2007 17:07

Если мы пишем код и используем типизацию, то мы прописываем тип для всех объектов. Если у нас появляются объекты без указания типа, то значит мы непоследовательны. Либо мы сами не знаем тип объекта, что говорит о наших неполных знаниях AS.

pkfun 20.01.2007 17:11

Цитата:

Сообщение от Kikasso
Код:

var myObj:Object;
trace(myObj.nextFrame);
var fake;
trace( fake.nextFrame );
trace (fake.nextFrame === myObj.nextFrame);

И вы все еще утверждаете что это одно и то же?

Смотрите пост 17. Я ж написал - для самоконтроля.

etc 20.01.2007 17:13

Kikasso, с точки зрения компилятора без разницы. Речь идёт о том, какой смысл закладывается в указание Object. Для меня это значит, что объект не может быть простого типа. А если нифига не указано, то ждать можно чего угодно. В AS1 пожалуйста, пишите так.

Kikasso 20.01.2007 17:13

Я не говорю о вопросах знания, незнания и подсознания, последовательности и непоследовательности.
Указывать тип Object все равно что не указывать ничего.
Да оп чем мы тут спорим?
pkfun, я видел, свой метод показал постом ниже.

CorC 20.01.2007 17:14

Цитата:

Сообщение от pkfun
Либо мы сами не знаем тип объекта, что говорит о наших неполных знаниях AS.

не всегда, иногда нам просто нужен резиновый тип

etc 20.01.2007 17:15

Ну, а кто говорил, что это разные вещи? Я говорил, что это хуже для разработчика, вот и всё. Компилятору все-равно.

CorC, у меня никогда такого не было, что нужен «резиновый» тип.

CorC 20.01.2007 17:18

ну тогда зачем такое во флеше предусмотрено?
по-моему это как раз не зря, именно для, не то что бы
неопытных прогаммеров, просто для ленивых
иногда проче просто заявить переменную без типа
+ ускоряется написание скриптов

Kikasso 20.01.2007 17:19

Цитата:

Сообщение от __etc
Ну, а кто говорил, что это разные вещи? Я говорил, что это хуже для разработчика, вот и всё. Компилятору все-равно.

Если одно хуже другого, то это подразумевает наличие различия.
Ладно, мир дружба африка жевачка :drinks:

Kikasso 20.01.2007 17:21

Цитата:

Сообщение от CorC
ну тогда зачем такое во флеше предусмотрено?

По историческим причинам. AS ведет свою историю от JavaScript, где строгая типизация вела бы к раздуванию документа html.

etc 20.01.2007 17:27

В AS2/AS1 это не имеет различий для компилятора (потому как AS2 не существует, а в AS1 нет типизации в принципе). В AS3 имеет. Потому как там правильное интерпретирование типа указанного типа Object.

etc 20.01.2007 18:42

Цитата:

Сообщение от Kikasso
AS ведет свою историю от JavaScript, где строгая типизация вела бы к раздуванию документа html.

Даа? А я думал, AS сделан по стандарту ECMAScript, он же ECMA 262 edition 3 (4 для AS3)… Впрочем, JavaScript был первым по стандарту ECMAScript, но типизация тут точно непричем.

CorC 20.01.2007 18:56

Цитата:

Сообщение от __etc
JavaScript был первым по стандарту ECMAScript, но типизация тут точно непричем.

блин просто для справки дайте плиз линк, или расфишруйте,
просто ужасть как интересно стало, про ECMAS

etc 20.01.2007 19:04

http://en.wikipedia.org/wiki/ECMAScript


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

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