PDA

Просмотр полной версии : Как создать глобальную функцию в ActionScript3.0?


stas0
21.12.2013, 17:19
У меня есть пакет с классом

package zoo{
public class VirtualZoo{
public function IsWin(){
// Глобальная функция
}
}
}


Теперь, что нужно сделать, что бы создать глобальную функцию, которая будет доступна из любой части программы? Расскажите поэтапно, а то никак не пойму!

Digital
21.12.2013, 18:49
public function - это и есть глобальная функция

samana
21.12.2013, 18:55
Вы можете сделать такую функцию статичной, тогда доступ к ней будет отовсюду, через имя класса.

Wolsh
21.12.2013, 20:18
"Поэтапно":
package zoo{
public function isWin():Boolean {
// Глобальная функция
}
}

Isfet
22.12.2013, 09:34
package zoo{
public class VirtualZoo{
public static function IsWin(){
// Глобальная функция
}
}
}

из другого класса обращаться так
VirtualZoo.IsWin();

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

caseyryan
22.12.2013, 11:02
Wolsh правильно сказал, только не уточнил как все надо делать.
Если хотим глобальную функцию, без всяких импортов, то делаем так:
создаем в корневом каталоге файл .as с названием, соответствующим названию функции, например someFunc.as
а в нем пишем

package {
public function someFunc(a:Number, b:Number):Number {
return a * b;
}
}

Это будет глобальная функция, возвращающая произведение двух параметров

Babylon
22.12.2013, 15:02
Это справедливо не только для функций

fd96
23.12.2013, 22:56
Мне говорили, что глобальные функции не есть ООП и по - хорошему их пользуют только быдлокодеры, расскажите почему? Очень таки полезно ведь, чтоб простыни не писать...

Babylon
23.12.2013, 23:02
Я например, считаю JavaScript больше ООП чем AS3. Это моя т.з.

Akopalipsis
23.12.2013, 23:04
я не знаю, что такое "глобальная", но если речь о "публичном методе", то Вы возможно что то перепутали.
Без публичных методов жить невозможно, но такое высказывание я слышал о публичных свойствах.
Хотя я наверное ошибся и без них можно, тогда надо будет посылать данные вместе с событиями, но мне кажется,
что лучше сделать публичный метод с возвращением значения.

Babylon
23.12.2013, 23:05
Программировать надо технологично, а вовсе не объектно ориентированно.

MikroAcse
23.12.2013, 23:21
Akopalipsis, Вы просто обожаете усложнять себе жизнь!

Akopalipsis
23.12.2013, 23:33
Akopalipsis, Вы просто обожаете усложнять себе жизнь!
То есть, если в обьекте создать обьект, то лучше к нему обращаться, через третий обьект, в котором будет в цикле проверяться соответствие на данное событие? По Вашему калбек это вред?

fd96
23.12.2013, 23:45
Вызовы? Смотря сколько их если рекурсивная функция - то беда однако... И тут внимательнее надо, а то на каждый вызов можно получить новый экземпляр класса...

На Яве после AS3 я зашёл первый раз и не увидел в 95% случаев существенных различий, просто на яве синтаксис по-определению не даёт писать быдлокод в простыню...

А вообще, существенные минусы использования глобальных функций и переменных? хоть кто - то?

ZackMercury
23.12.2013, 23:50
По Вашему калбек это вред?

Если я вас правильно понял, то не вред, но разрушение структуры ООП.
Если делать красиво, то объект имеет набор функций и событий для работы с ним, мы можем создать несколько его экземпляров и вообще не интересоваться его внутренним устройством. Но обращение вверх по композиции рушит эту структуру. Если следовать стандарту, то можно создать объект, который можно юзать в любых проектах. Если же обращаться вверх, то под каждый проект придется переписывать код класса.

Добавлено через 3 минуты
Кроме того, это приведет к путанице и непонятным ошибкам.

expl
24.12.2013, 02:26
Мне говорили, что глобальные функции не есть ООП и по - хорошему их пользуют только быдлокодеры, расскажите почему? Очень таки полезно ведь, чтоб простыни не писать...
Тогда получается, что все, кото использует Math - быдлокодеры

просто на яве синтаксис по-определению не даёт писать быдлокод в простыню...

Не, это даже для художественного эпитета ни в какие ворота

Кстати, у as3 как языка(не сравнивая API платформ - это бесполезно) наряду с кучей недостатков всё же есть преимущество перед Java: там можно передать ссылку на метод, а не только на объект, хотя и без проверки типов на этапе компиляции.

А вообще, существенные минусы использования глобальных функций и переменных? хоть кто - то?
Без кода - это всё болтология. Приведите пример, где вы используете статическую функцию

А в общем виде статические функции надо различать по тому, используют ли они еще и статические переменные или не используют
Если не использует - то ничего страшного, такая функция без проблем в любой момент может быть перекинута на объект, буде то необходимо

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

Короче, без кода это получается беспредметное расписывание вариантов, ни о чём

fd96
24.12.2013, 02:45
Нет же, уважаемый, не моё мнение о глобальных функциях и переменных, просто бытует такое мнение, что это уже не ООП в ООП нет глобальных переменных и функций, синглтоны онли.
Я просто спросил есть ли примеры, когда глобальные функции или переменные вредят коду,а не улучшают читабельность кода и расширяемость.
Я и сам, впрочем, любитель глобального, опять - же бытует мнение, что глобальные переменные и функции жрут память, алсо динамические функции и переменные глобально сделать можно, зачем - же статика... хотя костыль...

Тут вопрос встаёт ребром позже, откуда тащить переменные если их запихивать в майн и тащить в классы из майна получается ужас, читать нельзя, сжечь.

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

ZackMercury
24.12.2013, 03:30
в ООП нет глобальных переменных и функций, синглтоны онли.
Unknown Error: Compiler died when read that. Please, reinstall mxml...

at line 2, №17.

Babylon
24.12.2013, 04:10
ОО вероятно определяется ключевым словом new

Wolsh
24.12.2013, 04:14
я не знаю, что такое "глобальная"
которая будет доступна из любой части программыЭто функция, не принадлежащая экземпляру и не принадлежащая классу/статическая (поэтому никогда не говорят "глобальный метод"). Вы просто импортируете саму функцию в любом классе программы и пользуетесь.

Мне говорили, что глобальные функции не есть ООПЭто не ООП концептуально, ибо нет Объекта-хозяина функции (метода). Однако, с другой стороны, есть ли смысл создавать Класс, чтобы пользоваться его единственной функцией?

fd96
24.12.2013, 09:21
Wolsh, а с технической точки зрения проблем от такого подхода с глобальными переменными и функциями не возникнет, чисто теоретически?

alexcon314
24.12.2013, 10:14
С технической точки зрения нужно просто держать зарубку на носу "эта функция/переменная висит в вакууме где-то в коде и хз что из себя представляет и зачем нужна", а в остальном все в порядке.
чтиво (http://www.gunsmoker.ru/2011/04/blog-post.html) для теоретиков.
Недавно тут еще обсуждали тему про "держать весь код приложения в одном файле". Из той же оперы.

Babylon
24.12.2013, 18:51
alexcon314, не стоит привлекать физические понятия такие как "ваккум". Вы понятия не имеете где хранятся такие переменные. Память далеко не ваккум.

alexcon314
24.12.2013, 19:46
Спарведливости ради, сравнивать память с вакуумом нельзя все же. Собственно, и в мыслях не было, но раз так... Исправил пост.

Речь шла о пользе/вреде глобальных переменных и функций. Это так, к слову.

dimarik
25.12.2013, 22:07
Тут (http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/package.html) перечислены нативные top level константы и функции.