![]() |
Переопределение операторов в AS3
Только начал разбираться с третим скриптом. Вижу что много нового полезного добавили. А переопределение операторов добавили?
|
А что подразумевается под «переопределение операторов»?
|
если вы имеет ввиду переопределение членов класс, то это можно делать и во второй версии языка...
|
Если кто программировал на C++, то помнят , что там можно переопределить такие операторы как +,-,=,==,[] и т.д.
Например для класса Vector3D очень бы хотелось писать так Код:
var a:Vector3D = new Vector3D(1,0,0);Код:
var a:Vector3D = new Vector3D(1,0,0);То есть как я могу указать я хочу ссылку на объект скопировать или просто скопировать все члены объекта? В AS2 мне приходилось писать функцию CreateCopy, которая создавала новый объект такого же класса, копировала все члены и возвращала ссылку. |
Ненужно этого делать, ибо плохой стиль программирования, если работаешь в комманде - неочевиден результат для напарника, хотя если работаешь сам с собой то все нормально.
|
Цитата:
|
Цитата:
Если про операторы += и тому подобные, то как же Вы порекомендуете поступать с векторами и матрицами? Как раз для таких типов подобные оперторы это хороший стиль программирования, т.к. операции суммы, вычитания, скалярного умножения или веторного умножения вполне определённые вещи. Кстати, может есть встроенные 2D или 3D вектора ? |
2Ляксей
потому что ECMA, а по поводу хорошего стиля, согласен, нехрен повторять умные слова из заумных книжек. а просто методами нельзя подобное сделать? приведи пример? и еще бы посоветовал порыть сырцы какой нибудь 3D либы типа Papervision и физического движка на AS3. |
Цитата:
производительность труда. Цитата:
Только первый вариант более читабельный. Код:
c = b*a; // вариант 1 |
мне и так все очевидно,
кратко - да, возможности которые нельзя сделать методами - нет. я хотел увидеть пример реализации который действительно нельзя реализовать с помощью методов... а согласен я был с вами. |
Цитата:
если уж браться за математику, может лучше написать какой транслятор с языка куда более для математики подходящий? а с перегрузкой, опять же у меня чисто академический интерес. зачем перегрузка нужна то? на Cи как то не пришлось пописать, ну взять "современные" языки типа С# или Scala ... ну да приятный синтаксический сахар, ну меньше писать, но и путаницы больше, поди разбери кто этот оператор перегрузил. с методом на самом деле ведь проще и документируется проще. передать можно больше параметров чем один.... а что меньше писать.. может быстрее нужно набирать текст? короче перегрузки нет, и все тут :) |
По поводу 3Д движков, я их тоже не писал, но...
Не стоит рассчитывать большие объёмы математики множеством инкапсулированых методов... сильно снизится производительность. Ну например я сделал класс комплексного числа, где создал методы умножения и деления. Так вот, умножение комплексных чисел инкапсулирвоанными методами(или перегруженными операторами исли бы такие были в AS3) в десятки раз медленне прямого умножения и назначения переменных. (без геттеров/сеттеров, что тоже важно) |
В HaXe есть такой оператор: ... (троеточие).
Создаёт итератор от первого до второго операнда. Например: Код:
for (var i in 0...str.length) {}Тоже, кстати, давно мечтаю о переопределнии операторов в AS, но, увы, видимо этого никогда не будет. P.S. А ещё я слышал страшную историю про переопределённый оператор "запятая" :) |
Цитата:
|
вот inline методы - это то чего реально не хватает.
|
А на вопрос так никто и не ответил. Как всегда...
Так можно ли сделать переопределение операторов (например, "+") в AS3? |
versus_spb, я почему-то увидел ответ на вопрос.
Цитата:
|
BlooDHounD, что такое inline методы?
Вы имеете ввиду анонимные функции? Код:
loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, function() { |
inline - когда вместо вызова функции компилятор подставляет её код. Это убирает накладные расходы на вызов функции в обмен на увеличение объёма исполняемого файла.
|
Нет. Т.н. inline методы это хитрый финт ушами, который есть, скажем, в haXe, и которого нету в AS3. Вызов метода, объявленного как inline, компилируется не как вызов метода, а подстановкой кода метода в вызывающий код. Таким образом, с одной стороны получается экономия на вызовах метода (не знаю, насколько это актуально в AS3, но вот в AS2 - да, это было актуально), а с другой, если этот метод вызывается из нескольких мест, нету необходимости вносить изменения во все эти места, если требуется что-то поменять.
P.S. И да, вот Стенко правильно отметил, т.к. код такого метода вставляется в вызывающий код, то вес результата увеличивается. И опять же, если не идёт борьба за каждый байт - не уверен, насколько эта проблема актуальна. |
Код AS3:
|
| Часовой пояс GMT +4, время: 13:10. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.