Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Использование super (http://www.flasher.ru/forum/showthread.php?t=137068)

koIIImarik 30.09.2010 01:10

2 cleptoman:
Цитата:

в том то и дело, что не совсем вкуса..супер - явный признак вызова родительского метода.
т.е. к примеру если мы разбираем класс, где много много букаф и видим конструкцию super.someMetod() мы не лазием по тыще строк в поисках его (его может и не быть в этом классе), а смотрим экстенд и смотрим метод в родителе. я к чему - проще для восприятия и работы с кодом в целом. это навскидку)
В FlashDevelop всё решается кликом на методе и нажатием F4 =)

2 etc:
Цитата:

1) Вызываем method3 класса Class2, который в свою очередь вызывает method3 у Class3. Всё через super.
Если это шутка, то я её вначале не понял =) Хотел написать, что это бред.

По поводу использования super везде, моё мнение схоже с Котяра. Хотя, опять же, это, наверно, дело вкуса, кому-то, может быть, удобнее писать super везде. Если такие есть, то мне интересно, пишете ли вы super.addChild, или super.graphics, или super.mouseX или super.contains?

Psycho Tiger 30.09.2010 01:18

Это случай на миллион, когда вдруг внезапно потребовалось что-то изменить, да так, чтобы у всех. Случай на 10 тысяч это когда конкретному блоку кода нужно вдруг другое поведение, а не всем в целом - тут уже переопределяем метод и не парим голову по поводу того, что в 40 местах это поведение вдруг изменилось.
В моей практике как-то так. Миллион бывает реже, поэтому я пишу super. А учитывая что мне с ним когда читать легче - мой выбор очевиден. А начиналось с моды..)

Кошмарик, да. Я даже super.stage пишу ))

etc 30.09.2010 11:51

Цитата:

Сообщение от koIIImarik (Сообщение 939617)
Если это шутка, то я её вначале не понял =) Хотел написать, что это бред.

Чистейшая правда.

Цитата:

Сообщение от koIIImarik (Сообщение 939617)
Если такие есть, то мне интересно, пишете ли вы super.addChild, или super.graphics, или super.mouseX или super.contains?

Пишу.

zuxul 30.09.2010 13:40

Цитата:

Сообщение от etc (Сообщение 939677)
Пишу.

ё мое...сколько лишних букв, :eek:
super, this - это же идентификаторы области видимости в классе и только...
Представляю, во что бы превратился код на с++ (там используется конструкция "ИмяКласса::" либо просто "::") если для "понятливости" везде писали эти конструкции...
Цитата:

Сообщение от Psycho Tiger (Сообщение 939619)
и не парим голову по поводу того, что в 40 местах это поведение вдруг изменилось.

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

Psycho Tiger 30.09.2010 13:42

Если логика не меняется - и переопределять не надо.

Котяра 01.10.2010 00:36

Лишние буквы — плохо!
Код AS3:

this.property =  this.otherProperty + super.oldProperty;

по уровню сигнал/шум намного хуже чем,
Код AS3:

property =  otherProperty + oldProperty;

Ещё раз — лично моё имхо и ничего более :)
Я и this не пишу без явной надобности.. f4 спасает, хотя при использовании интерфейсов/базовых классов — ничего не спасает :(
UPD и честно говоря, меня мало волнует - пишут super/this или нет, главное чтоб код был понятен и нормально организован, и хотя бы в основном соблюдал конвенции, а эти мелочи — дело десятое.

-De- 01.10.2010 01:27

Если вы всюду пишете super, то это значит, что вы хотите, чтоб по умолчанию вызывался метод старшего в иерархии класса, даже если этот метод переопределён. Т.е. чтоб был не super, а notSuper, а поведение с super было по умолчанию. Но это бред и такого нет ни в одном языке, ибо полиморфизм и инкапсуляция.
super означает, что по каким-то очень специальным причинам вызывается не переопределённый в классе метод, а метод родителя. И пока этот метод не переопределён, то нечего писать супер, т.к. методы вообще переопределяются (а не пишутся другие) для того, чтоб их переопределённые вызывали.
this означает, что дёргается не локальная/глобальная переменная/функция, а именно поле/метод этого класса (и значит, похоже, тут есть локальная переменная с таким же именем и надо быть поосторожнее).

Котяра 01.10.2010 14:34

@-De-
Отлично сказано!

Psycho Tiger 01.10.2010 14:53

Зайдём с другой стороны.
Люди пишут this чтобы сразу отличать локальные переменные от полей. this.addChild я считаю безграмотным. Да, он доступен в этом скоупе. Но в this его никто не объявлял.

-De- 01.10.2010 16:11

Psycho Tiger, по-моему зло везде this лепить. Лучше уж тогда венгерская нотация - m перед всеми членами класса и всё видно и писать меньше. Там, где надо подчеркнуть, что это именно член класса - да (ну или просто без this работать не так будет). Но если опасаешься путаницы с локальными, то это по-моему повод на полсекунды задуматься, всё ли так в методе.


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

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