Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Что дает употребление this в не динамических классах? (http://www.flasher.ru/forum/showthread.php?t=176005)

gait 28.02.2012 22:20

Что дает употребление this в не динамических классах?
 
Собственно, сабж. Никогда не пользовался в не динамических классах, но часто вижу употребление другими этого ключевого слова везде, где только можно. Это что-то дает? И, если дает, то что? А если не дает, зачем использовать? Спасибо.
UPD. Наверное это мега-нубский вопрос, но я в упор не понимаю, зачем использовать this. Объясните мне, люди!

HardCoder 28.02.2012 23:11

Цитата:

Сообщение от gait (Сообщение 1066096)
Что дает употребление this в не динамических классах? ... Никогда не пользовался в не динамических классах ...

А что оно дает в динамических классах?
Являюсь сторонником this. Намного удобнее читать код (лично мне) - сразу определяешь где свойство/метод класса или суперкласса, а где локальная переменная.

-De- 28.02.2012 23:24

Загуглите, что такое this.
Из этого всё растёт.
Из других неочевидных - чтобы различать переменные класса и локальные.
Код AS3:

private var a:int;
function fun(a:int):void {//если вам лень придумывать уникальные имена или религия не позволяет, например
this.a = a;
}

Когда лепят всюду, это такая прямая замена m_ венгерской нотации, означает, что переменная - член класса.
PS: this хоть безопасен, а вот super лучше не писать, это какое-то легкое помешательство чисто местных флешеров.

HardCoder 28.02.2012 23:35

Цитата:

Сообщение от -De- (Сообщение 1066107)
PS: this хоть безопасен, а вот super лучше не писать, это какое-то легкое помешательство чисто местных флешеров.

Не являюсь сторонником super (хотя, иногда без него нельзя обойтись). Но все же. Разве super не увеличивает скорость компиляции? Даже если не увеличивает, то почему лучше не писать?

TanaTiX 28.02.2012 23:49

Пишу только то что нужно и когда нужно (this, super). Никакого дискомфорта от этого не испытываю.

-De- 29.02.2012 00:09

Если в классе (или его наследниках), где везде писалось super.method() method всё-таки кто-то перегрузит, то придется от этого super избавляться.
super пишут либо если method уже перегружен и таки хочется вызвать метод базового класса - собсно для этого super сделан. Либо если класс криво написан и потому опасно этот method перегружать автор хочет сказать "не перегружайте method ни за что, не вашего ума дело".

СлаваRa 29.02.2012 00:31

-De-, чего - то я немного не догнал, что ты подразумеваешь под
Цитата:

перегрузит
? или ты про переопределение?

HardCoder 29.02.2012 00:43

Перегрузки в АС3 нет, поэтому логично предположить, что имеется в виду переопределение. -De-, можешь обьяснить, что это значит:
Цитата:

Сообщение от -De- (Сообщение 1066112)
Либо если класс криво написан и потому опасно этот method перегружать автор хочет сказать "не перегружайте method ни за что, не вашего ума дело".

Почему опасно? Выходит, я не могу написать:
Код AS3:

public class SomeClass {
      public function func1():void {
            doSomeAnother();
            //здесь вызываю метод суперкласса:
            super.method();
            //что в строчке выше кривого, и почему это делать опасно?
            //и где намек на то, что я говорю: "не переопределяй method!!!"
      }
 
      override public function method():void {
            doSomething();
            super.method();
      }
}

Код AS3:

var a:SomeClass = new SomeClass();
//делаю что-то и вызываю метод суперкласса
a.func1();
//вызываю переопределенный метод
a.method();


-De- 29.02.2012 00:58

override, конечно.
HardCoder, написать, конечно, можно (extends не забыть только), но вот в данном примере super.method(); вызовется дважды. И ещё представьте, что в SomeClass есть куча методов типа func1. И в них захотелось вызывать новый method(); старый уже не тот.
Захотел сделать свой дисплей лист с addChild, но везде super.addChild.

elder_Nosferatu 29.02.2012 01:11

Когда изучал АС3, то пользовался флешовой идехой и, конечно, код писал в кадрах. Там this я лепил где только можно было - это помогало получать контекстно зависимый автокомплит


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

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