![]() |
Указание типа возвращаемых данных у функций
Компилятор постоянно выдает ворнинги о том, что у функции не указан тип возвращаемых данных, даже если функция ничего не возвращает, т.е. используется как процедура. Что лучше в данной ситуации - забить на ворнинги или всем таким функциям указать void?
|
Я в шоке. Конечно указать void.
|
С точки зрения ресурсов, чем черевато неуказание типа данных?
|
Чревато тоннами ворнингов, как минимум. В последствии ещё и грязным кодом.
|
Непредсказуемым поведением. В ас3 всегда нужно типизировать методы, переменные и константы. Иначе можно наткнуться нато, что где-то будет не тот тип данных, который ожидался
|
Плюс ко всему, среди сотен одинаковых ворнингов о "void", можно пропустить другие ворнинги. Ворнинг для того и существует, чтобы на него обратили внимание и исправили.
|
Это понятно. Я имел ввиду использование памяти и процессора.
|
ничем не чревато в этом плане
|
Один знакомый прогер, говорит что неуказание типа данных :void вынуждает флеш проводить проверку или эта функция что то возвращает... что теоретически способствует уменьшению скорости работы.
|
Newred, вот я примерно так же подумал - если тип не указан то наверное резервирует в памяти заведомо избыточный объем для хранения значения.
Ладно, всем спасибо, полазил по сайту адоба - прояснил некоторые моменты для себя. |
Вы в Flash Builder видимо не работали) он критичен к многим warning.
Не хочу повторяться, но от себя - ставьте типы везде где это можно, И старайтесь как можно реже использовать тип :* |
Да, не работал, только во Flash CS 5.5 и пару дней во Flash Develop. Типы проставил везде где можно, даже в счетчиках циклов ) А про тип :* вообще не знал... Теперь знаю но постараюсь им не пользоваться
|
Цитата:
Типизация так де дает возможность получать от IDE подсказки по коду. Если она знает какой это тип данных, то получает от него весь список публичных свойств |
* тоже самое, что отсутствие типа.
|
но в счучае со звездочкой, компилятор не выдаст предупреждения
|
Ну да, за исключением этого.
|
А в чем разница - указывать * или Object? Ведь по сути тип данных и не Object - это только undefined.
|
Разница в том, что если указать Object, то при вызове какого-то свойства (которого у Object нет), компилятор выдаст ошибку, а в случае со звездочкой, ему пофиг =)
|
Цитата:
|
Я лично думал, что разница в этом:
Код AS3:
|
Цитата:
есть какой-либо интерфейс: Код AS3:
Код AS3:
Код AS3:
Код:
C:\Users\Konstantin\Flash\DifferentTests\src\ObjectTest.as(11): col: 16 Error: Implicit coercion of a value with static type Object to a possibly unrelated type IDisposable.Код AS3:
|
Ну это круто конечно, только бессмысленно =)
В моем проекте я могу не знать что именно возвращает функция, но в том что она хоть что-то возвращает я не могу сомневаться. Так что сомнительная фича. Я всегда пишу Object. @goodguy Так ты тип поставь нормальный - IDisposable, и все заработает =) |
Но похоже сильно разницы нет, и это всего лишь проверка при компилиции, ибо вот так работает:
Код AS3:
|
Цитата:
Допустим у меня в игре есть несколько видов солдат, Rookie, Thug, Mercenary и т.д. Все они, применяют интерфейс ISoldier, и при столкновениях UserData проверяется по интферфейсу объекта. Согласись, проверять каждый класс было бы глупо. Да и не известно, сколько я их еще захочу добавить. Раз уж с объектом это работать не будет, остается только звездочка. Так что фича не сомнительная, а довольно полезная. |
goodguy, это вполне логичная ошибка приведения типов, а не вызова неопределенного метода/свойства. * по сути типа вообще никакого не имеет, поэтому и ошибки как бы нет.
|
О чем я и говорю. Использование звездочки != использование Object в качестве типа
В том посте не так выразился =) |
Цитата:
Несмотря на подобные «фичи», их использование должно быть осознанным, а не ради подавления ворнингов и эксепшенов. |
Цитата:
|
В скайпе уже объяснял народу =) Ну да ладно, объясню еще раз.
Такая ситуация: бокс2д, там userData имеет тип данных *. У меня в тип данных, который может быть ей назначен, передается либо ISoldier, либо IMovable. Причем не известно когда и какой будет назначаться. Назначается он не напрямую, а через сеттер. В классах солдат сеттеры в качестве параметра имеют ISoldier, в транспортных средствах IMovable. Это нужно для проверки столкновений между разными объектами через b2ContactListener. Так вот, если я назначу туда Object, вместо *, то все мои сеттеры будут дружно кидаться ошибками прведения к типу. Да и смысла назначать туда Object не вижу, так как все равно потом придется проверять ISoldier это или IMovable. Так что звездочка здесь - самый удобный вариант (хоть и не утверждаю, что без нее обойтись нельзя). |
Все равно не понял, какое отношение это имеет к данному выражению. Ну пусть в сеттере (value:*). А кастинг-то тут каким боком? Такому сеттеру же совсем по-барабану, что в него передали, зачем ему кастинг?
Ну и, не могу промолчать, но почему же не сделать хотя бы маркерный интерфейс, реализуемый и солдатами и транспортом, какой-нибудь IForce, и спать ночью спокойно, не царапая программистскую совесть звездами? |
Цитата:
Этот вариант исключен. Цитата:
Мой вывод: звездочка полезна, и нужна. п.с. Никаких претензий к скорости исполнения такого кода у меня нет совершенно. Все работает так быстро, как мне и нужно. |
Архитектуру пересмотреть не желаете? Пока не поздно...
|
Может, Вы просто кода кусочек покажете, потому что я решительно не понимаю, о чем Вы. Когда Вам надо будет узнать, солдат это или танк, Вы как ни крутите, будете проверять тип. Что со звездочкой, что с IForce. Вот только "в звездочку" залезет любая зараза, а в IForce – только боевые силы.
Цитата:
Ладно, ну объясните мне по существу, по конкретному вопросу: зачем ЭТО? Цитата:
|
Цитата:
У меня в приложении архитектура нормальная. Цитата:
Вместо IForce тут можно было бы и просто DisplayObject заюзать. Но не вижу необходимости. Цитата:
|
Цитата:
|
В общем ладно, хватит меня убеждать, что звездочка зло )
Ничего плохого в ней нет, если не злоупотреблять. Вопрос то был в другом: Object == * ? ответ: нет. |
Цитата:
Цитата:
Код AS3:
Цитата:
|
Цитата:
Если вы знаете что она может вернуть несколько типов, лучше проверить их на выходе с помощью switch-is инструкций Добавлено через 2 минуты Цитата:
На вопрос Вы ответили верно, Object != * |
Цитата:
Цитата:
Цитата:
|
Цитата:
|
| Часовой пояс GMT +4, время: 13:10. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.