Форум 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 29.02.2012 04:01

Цитата:

Сообщение от -De- (Сообщение 1066107)
Загуглите, что такое this.
Из этого всё растёт.

Я не гуглил, просто открыл справку, а там написано только это: "Ссылка на объект, содержащий метод. При выполнении сценария ключевое слово this ссылается на объект, содержащий сценарий. В теле метода ключевое слово this ссылается на экземпляр класса, который содержит вызываемый метод." И всё, больше никаких подробностей :(
Цитата:

Сообщение от -De- (Сообщение 1066107)
Когда лепят всюду, это такая прямая замена m_ венгерской нотации, означает, что переменная - член класса.

А если я как раз эту венгерскую нотацию и использую, только в упрощенном варианте
Код AS3:

private var _myObj:Object;

, то какая еще может быть польза от применения this? (Вообще-то, даже странно. Довольно часто встречаю конструкции с венгерскими нотациями и с this, например this._myObj. Это вообще как понимать? Зачем так делать?)

Цитата:

Сообщение от wvxvw (Сообщение 1066135)
Я пишу this всегда, тогда когда оно есть.

Цитата:

Сообщение от wvxvw (Сообщение 1066135)
Поэтому, я восновном пишу super, и редко this.

Всё-таки мне не очень ясно, когда вы пишете this :confused:

Цитата:

Сообщение от wvxvw (Сообщение 1066135)
Еще такой момент. this это не ключевое слово, это переменная, просто компилятор сам заполняет значение этой переменной. Ключевое слово, это, например, for, var и т.д. - т.е. это не "идентификатор".

Я конечно в такие дебри не вдавался, и, может быть вы правы, но очень часто я встречал упоминание в адобовской доке, что это именно ключевое слово. Вот, например, страница 109 "Так как статические методы не связаны с отдельными экземплярами, в их теле нельзя использовать ключевые слова this и super.". "В примере проверяется также значение ключевого слова this. В данном случае this представляет глобальный объект." (стр 276). Или вот еще: "Учтите, что ключевое слово this относится к экземпляру ChildSprite с именем child. В этом состоит отличие от поведения в ActionScript 2.0. Если вы использовали компоненты в ActionScript 2.0, то могли запомнить, что когда метод класса передавался UIEventDispatcher.addEventListener(), область его действия была привязана к компоненту, который выполнял широковещательную рассылку события вместо класса, в
котором был определен метод прослушивателя. Иными словами, если вы пользовались этим методом в
ActionScript 2.0, ключевое слово this будет относиться к компоненту, осуществляющему широковещательную рассылку события, а не к экземпляру ChildSprite."

Но справедливости ради надо отметить, что this еще именуется в документации как ссылка (на той же 109 странице, например), поэтому, я не могу быть увереным в своём понимании.

-De- 29.02.2012 04:33

Цитата:

Сообщение от gait (Сообщение 1066137)
При выполнении сценария ключевое слово this ссылается на объект, содержащий сценарий. В теле метода ключевое слово this ссылается на экземпляр класса, который содержит вызываемый метод.

Ну да, кэп вот подсказывает, что когда нужен "объект, содержащий сценарий", "экземпляр класса, который содержит вызываемый метод", тогда и писать this. Ссылку там на себя передать кому. Без остального можно жить.
UPD: вроде так и не поняли, что же это такое. this - это экземпляр класса, в методе которого этот this написан. Статики живут глобально и отдельно от экземпляров класса (чтоб их вызывать не нужно создавать экземпляр класса, например), нет экземпляра - нет this. Переменные типа класса - все ссылки, потому this - это тоже ссылка (т.е. при присвоении а = б, если а и б - классы, то копирование класса б не происходит, а а и б ссылаются на один обьект и если менять а, то будет меняться и б).
Если что - поищите примеры использования %) И учите, блин, язык, а то чую написал китайскую грамоту =\

Yahen 29.02.2012 11:22

Вообще-то слово this положено писать обязательно, если обращаешься к свойству класса внутри него. AS3 позволяет во многих случаях быть безалаберным и не указывать this явно. Компилятор умеет разруливать во многих случаях такую ситуацию. Но в целом это плохая практика. Другие языки программирования как правило не позволяют писать так безалаберно.
Стандарты промышленного кодирования в конторах обычно не разрешают не писать this. То бишь неявное обращение к свойствам класса не приветствуется.

КорДум 29.02.2012 11:31

Оффтоп:

Цитата:

Другие языки программирования как правило не позволяют писать так безалаберно.
На моей памяти это только php. Какие еще?

elder_Nosferatu 29.02.2012 11:50

По моему тут все зависит от реализации транслятора. Когда начинал учить с++ никак не мог подобрать книгу и компилятор к ней (не било у меня тогда доступа к и-нету). Вот и приходилось експериментировать.

Добавлено через 2 минуты
Самое что запомнилось, так это первый мой прокол.
В книге было написано
Код:

#include <iostream>
а борландовский Турбо Си++ хотел
Код:

#include <iostream.h>
Добавлено через 3 минуты
Думаю ето может касаться и this.

gloomyBrain 29.02.2012 12:14

У меня такое правило: если в классе есть определение метода:
Код AS3:

public function method():void ...

то обращение к нему в этом классе выглядит так:
Код AS3:

this.method();

Если же определения метода в классе нет, то обращение выглядит так:
Код AS3:

super.method();


-De- 29.02.2012 12:27

Цитата:

Сообщение от Yahen (Сообщение 1066150)
Стандарты промышленного кодирования в конторах обычно не разрешают не писать this.

Не видел ни одного. У гугла такого нет. http://google-styleguide.googlecode....k/cppguide.xml

Zebestov 29.02.2012 13:52

Всегда пишу super и this. Выбор "надо"/"не надо" отнимает время впустую.

HardCoder 29.02.2012 14:16

Все написанное ниже - это мое личное мнение и любое оспаривание моих слов... по крайней мере буду стараться игнорировать.
В посте №20 Wolsh меня шокировал. :) Знал что-то про наследование про то что подклассы - это классы с бöлбшим количеством свойств, но дальше не лез. Что бы там не говорили, теперь буду везде писать и this и super, а теперь и более серьезно относится к этим вещам. Руки от этого не отпадут, конвенция этого не запрещает. Мало того, считаю это хорошим тоном ЯВНО указывать к КОМУ ты обращаешься. ООП - он на то и ООП, что ты обращаешься к ОБЪЕКТАМ, а не к призракам. Это как писать точку с запятой в конце выражения, без которой можно и обойтись (это пример - не примите за новую ветку флуда; знаю что в случае с точкой с запятой есть объективные преимущества). Не знаю, обратил ли кто-то внимание на мои слова несколькими постами выше: у this действительно есть преимущества: скорость написания/чтения кода (сниппеты/распознавание переменных). А слова:
Цитата:

this для тех, кто не умеет нормально оформлять код
расцениваю как крик души, потому что объективности в этих словах ни какой. Меня вот, например, жутко бесит, когда фигурную скобку ставят в новой строчке вместо того чтобы ставить в конце выражения. Конвенция говорит что это правильно писать в новой строчке, но я все равно не могу к такому привыкнуть. Но, я же не говорю, что человек, который это делает, что-то не знает, или он делает по-глупому, только потому что Я так не делаю. Он выработал себе такой стиль, привык к нему. Поэтому если его стиль не нарушает правил хорошего стиля или конвенции - так пусть пишет себе. Мы не в праве с ним спорить, если у нас нет объективных доказательств что он не прав. Поэтому сам спор: "this/не this" - глупый.
На вопрос топикстартера:
Цитата:

Что дает употребление this в не динамических классах?
Ответ: ничего не дает.

Добавлено через 10 минут
Хотя, признаю что пример со скобой - плохой. Конвенция говорит, что надо писать в новой строчке, а я сам же дальше написал: "...если его стиль не нарушает правил...". Ну, что же - слово не воробей... Но, думаю, смысл понятен :)

alatar 29.02.2012 14:56

Цитата:

Ответ: ничего не дает.
Код AS3:

public var someValue:int;
 
public function someMethod(someValue:int):void
{
    this.someValue = someValue;
}



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

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