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

goodguy 07.11.2011 21:30

Цитата:

Ну и, не могу промолчать, но почему же не сделать хотя бы маркерный интерфейс, реализуемый и солдатами и транспортом, какой-нибудь IForce, и спать ночью спокойно, не царапая программистскую совесть звездами?
И как же я в таком случае буду узнавать, столкнулся солдат с себеподобным, или же его задавил танк? ) Или он при хотьбе наткнулся на стоящий джип, например.
Этот вариант исключен.
Цитата:

Ну пусть в сеттере (value:*). А кастинг-то тут каким боком?
У меня в сеттере помимо простого назначения, еще и получаются разные свойства от передаваемого объекта, например тип солдата, в соответствии с которым ему задается максимальная скорость, выносливость, передается ссылка на массив "отряд" и т.д. Короче говоря, во-первых я не понимаю, чем вариант со звездочкой в сеттере лучше или красивее изначалного (со звездочкой в userData), а во-вторых, с ним мне все равно пришлось бы приводить к типу и делать те же проверки.

Мой вывод: звездочка полезна, и нужна.

п.с. Никаких претензий к скорости исполнения такого кода у меня нет совершенно. Все работает так быстро, как мне и нужно.

dimarik 07.11.2011 21:42

Архитектуру пересмотреть не желаете? Пока не поздно...

Wolsh 07.11.2011 21:44

Может, Вы просто кода кусочек покажете, потому что я решительно не понимаю, о чем Вы. Когда Вам надо будет узнать, солдат это или танк, Вы как ни крутите, будете проверять тип. Что со звездочкой, что с IForce. Вот только "в звездочку" залезет любая зараза, а в IForce – только боевые силы.
Цитата:

я не понимаю, чем вариант со звездочкой в сеттере лучше
Надеюсь, это не ко мне? Потому что я вроде доказывал что от звездочек надо избавляться в пользу интерфейсов.
Ладно, ну объясните мне по существу, по конкретному вопросу: зачем ЭТО?
Цитата:

var someVal:* = new ToDispose() as IDisposable;
Что по-вашему здесь делает кастинг? Какова его ответственность? Какие изменения он инициирует? Что делает возможным, или какой оставляет след?

goodguy 07.11.2011 21:45

Цитата:

Архитектуру пересмотреть не желаете? Пока не поздно...
архитектуру чего? бокс2д? ) Это к Эрину Катто.
У меня в приложении архитектура нормальная.
Цитата:

Может, Вы просто кода кусочек покажете, потому что я решительно не понимаю, о чем Вы. Когда Вам надо будет узнать, солдат это или танк, Вы как ни крутите, будете проверять тип. Что со звездочкой, что с IForce. Вот только "в звездочку" залезет любая зараза, а в IForce – только боевые силы.
Не залезет туда ничего кроме IMovable и ISoldier. Кусочек кода показывать смысла не вижу, я же не вопросы тут задаю ) Меня в моем коде все устраивает. Работает отлично, написано все чисто и понятно.
Вместо IForce тут можно было бы и просто DisplayObject заюзать. Но не вижу необходимости.

Цитата:

Что по-вашему здесь делает кастинг? Какова его ответственность? Какие изменения он инициирует? Что делает возможным, или какой оставляет след?
Да это вообще простейший пример был. Какая разница что он тут делает? Это просто пример того, что Object не всегда можно использовать вместо *, и ничего более.

dimarik 07.11.2011 21:49

Цитата:

Сообщение от goodguy (Сообщение 1044451)
архитектуру чего? бокс2д? )

бокс 4Ы, естессна.

goodguy 07.11.2011 21:57

В общем ладно, хватит меня убеждать, что звездочка зло )
Ничего плохого в ней нет, если не злоупотреблять.

Вопрос то был в другом: Object == * ?
ответ: нет.

Wolsh 07.11.2011 22:21

Цитата:

Это просто пример того, что Object не всегда можно использовать вместо *
Это был пример того, что Object не реализует интерфейс IDisposable, а для звездочки никто этого не проверяет.
Цитата:

В этом случае компиляция завершается ошибкой ... C классами проблем нет, но интерфейсы - другой случай.
То есть вместо интерфейса нельзя подсунуть Обжект, а вместо любого класса – можно? Я сегодня спать спокойно точно не буду.
Код AS3:

private var _val:Sprite;
...
var s:Object = new Sprite(); // по желанию можно добавить as Sprite; или as Object;
this.val = s; // пытаемся выдать тип Object за Sprite, как когда-то за IDisposable
....
public function set val(value:Sprite):void
{
        _val = value;
}

Цитата:

Error: Implicit coercion of a value with static type Object to a possibly unrelated type flash.display:Sprite.
И получаем абсолютно ту же ошибку.

strangedk 07.11.2011 23:00

Цитата:

Сообщение от gloomyBrain (Сообщение 1044386)
В моем проекте я могу не знать что именно возвращает функция

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

Если вы знаете что она может вернуть несколько типов, лучше проверить их на выходе с помощью switch-is инструкций

Добавлено через 2 минуты
Цитата:

Сообщение от goodguy (Сообщение 1044455)
В общем ладно, хватит меня убеждать, что звездочка зло )
Ничего плохого в ней нет, если не злоупотреблять.

Звездочка - зло ))) я это отношу туда же, куда и обращение вида parent.parent.parent - вроде синтаксис позволяет, но использовать никому не порекомендую.

На вопрос Вы ответили верно, Object != *

goodguy 07.11.2011 23:28

Цитата:

И получаем абсолютно ту же ошибку.
Я и сам это знаю. Мог и не писать as IDisposable, ничего бы не изменилось
Цитата:

То есть вместо интерфейса нельзя подсунуть Обжект, а вместо любого класса – можно?
Что-то я не понял вопроса. Пора мне наверное спать идти уже ))
Цитата:

Звездочка - зло )))
Тут каждый решает для себя сам.

gloomyBrain 07.11.2011 23:41

Цитата:

Имхо, это крайне нежелательный случай, когда Вы не знаете какой тип возвращает функция.
Благодарю, Капитан! Имелось ввиду, что в рамках одного проекта вероятность возникновения ситуации, когда не известен тип возвращаемого, или вообще его наличие (единственное, где нам поможет *) стремится к 0.


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

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