32 Сообщения: 166 Зарегистрирован: 26.10.05 Откуда: Москва
Добавлено: 21 Декабрь 2005, 23:06:09
собственно указание пути к переменной - хорошая и настоятельно рекомендуемая практика. т.е.
a = 100
this.a = 100
по идее дают одинаковый результат, но рекомендуется второе, как более читабельное.
и, хотя в классах это не так критично, как в коде на таймлайне, всё же рекомендуется писать this.
Это уже вопрос "вероисповеданий" , кому как ближе и удобнее, и весь топ плавно перейдет в очередной "AS1 AS2 AS3" …, а разговор верующих - разговор глухих
В общем, кому как больше нравится. Я вот терпеть не могу на таймлайне писать this перед каждой переменной, каждым методом, да и вообще, что-то лишнее, но стоит признать, что порой и мне обойтись без него невозможно, к примеру в случае конфликтов унаследованного из 4-ки loadMovie и метода MovieClip.loadMovie
Король, with раньше был не в моде, а сейчас без разницы, пишешь ты с with или прямыми путями, всё одно и тоже (по словам Nox'а, сам я байткод не проверял, лень).
хм ты же САМ пишешь код. и должен знать где у тебя свойства и параметры.
если все переменные и т.п. утыканы this - вот тут как раз мешанина получается полнейшая.
всё дело в том, что если везде стоит this или наоборот его не использовать вовсе - это будут оба тупиковых, неопрятных варианта.
Если бы with() был бы лишним, его бы не использовали.
Особенно мне интересно посмотреть как например drawing API будет делаться без with(), используя this. Хочу поржать.
0 Сообщения: 585 Зарегистрирован: 12.03.04 Откуда: Беларусь - Борисов
Добавлено: 22 Декабрь 2005, 17:09:20
class Test
{
var a:Number;
function Test(a:Number)
{
a = a;
}
}
ну если для тебя это нормальный код - тогда извини …
или такой пример:
class Test
{
var _a:Number;
function Test(a:Number)
{
_a = a;
}
function get a():Number
{
retunr _a;
}
}
оно то конечно будет работать в обоих случаях … вот только нормальный человек задумается, "а где что?" если классов 20 штук, и везде таким образом всё заданно.
к тому же посмотри как работает _parent поподробнее - поэксперементируй. если хочешь я тебе пример где без this он просто выдаёт не то что от него ожидают
32 Сообщения: 166 Зарегистрирован: 26.10.05 Откуда: Москва
Добавлено: 23 Декабрь 2005, 00:36:19
использование this это не вопрос вероисповедания или красоты кода.
1) this работает быстрее чем with.
но я не вижу ошибки в случае с использованием with.
я собственно говорил о том, что нужно всегда указывать путь,
with - тоже один из вариантов.
но по вышеназванной причине я его не юзаю, вот и упустил из виду.
2) а вот хоть как-то указывать путь к переменной обязательно надо.
это хорошая практика программирования.
вот сегодняшнее письмо на руфлэш, отлично иллюстрирует вопрос:
Цитата:
a> […] Мне кажется,что тебе бы следовало вместо gotoAndStop(10) a> написать this.gotoAndStop(10) […] Ты был прав. this. как раз и не хватало. Теперь все на местах. и целых 2 дня потратил...
и это письмо далеко не первое и уж наверняка далеко не последнее в моей практике.
в принципе, this и иже с ним можно и не указывать. это не ошибка программирования, а плохой стиль.
причина в том, что для многих программеров, особенно пришедших из других языков
или просто начинающих, далеко неочевидны все хитросплетения цепочки областей видимости во Flash.
Не указывая явно путь к переменной мы обрекаем себя и того парня, который этот код впоследствии будет править,
на абсолютное понимание вопроса областей видимости во Flash.
понимание областей видимости - это вопрос опыта а не стиля. нормальный программер даже в чужом (а тем более в своем) коде видит, что если переменная в функции - надо смотреть, кто ее выполняет, если в кадре - надо смотреть, чей он, итд. this тут никакой дополнительной ясности не принесет. с флешем надо прость е-ться, е-ться и еще раз е-ться. и все станет понятно в какой то момент)
iv, вопросы скорости исполнения кода во флеше - глупость , мне искренне жаль людей использующих "tellTarget", что выйграть миллисекунду в десятитысячно-итерационном цикле
оффтопик:
Если говорить, о with, ради теории и красивых разговоров, то и тут мне кажется, что первое должно быть теоретически медленнее, чем второе:
var a = 10; var b = 20; var c = 23;
// 1) Раз за разом обращаемся к объекту (this) и потом каждый же раз к его новому свойству trace(this.a); trace(this.b); trace(this.c);
// 2) Переходим в область видимости объекта (в данном случае this), и далее перебираем его свойства with(this) { trace(a); trace(b); trace(c); } Но тут руку на отсечение не дам
Что касается указания пути: нужно, ни хоть как то указывать пути, чтобы избежать непознанных ошибок, а понять причины возможных ошибки, и вообще понимать структуру своего приложения и особенности флеша! (Если один раз сел, простите, задом в муравейник - это не повод всю жизнь носить сковороду в штанах )
Приведенный тобой gotoAndStop и мной loadMovie - это дурное наследство, исключение из правил, но это не повод городить вереницы this, лишь бы куда воткнуть.
This нужно использовать там где это необходимо!
И насчет рекомендации к хорошему стилю программирования во флеше, они говорят о том, что нужно: объявлять переменные, Не пользоваться недокументированным фичами, различными хаками и всевозможными трюками. И заметь все это для того, чтобы "тот парень" потом не мучался - про использование this в каждой строчке кода, там ничего нет …
логика в том, что когда ты пишешь функцию в кадре клипа - если ты сам не присваиваешь ее чему-либо (mc.function = (){}) и не толкаешь ее в прототип (MovieClip.prototype...) - то она автоматически присваивается клипу, которому принадлежит кадр. И все ее содержимое будет по умолчанию ссылаться на этот клип. логика железная. С какого содержимое функции должно ссылаться на mc только потому , что функция выполняется по его событию?
Уровень доступа: Вы не можете начинать темы. Вы не можете отвечать на сообщения. Вы не можете редактировать свои сообщения. Вы не можете удалять свои сообщения. Вы не можете добавлять вложения.