PDA

Просмотр полной версии : Зачем нужна переменная экземпляра


Pronoob
16.12.2011, 16:45
Зачем нужна переменная экземпляра, если ее значение, можно сразу присвоить целевой переменной?

bav
16.12.2011, 16:58
Возможно, пример кодом был бы понятнее.

Pronoob
16.12.2011, 18:18
var petName = name;
name = "Petya"

GBee
16.12.2011, 18:25
Это вы где такой ад находите?

Genzo
16.12.2011, 18:36
1 - var name;
var petName = name;
name = "Petya"
trace(petName , name);
//undefined Petya

2 - это в сях прокатило бы

petName = &name;
name = "Petya"

Pronoob
16.12.2011, 18:38
Я разбираю только основы по Колин Муку не стоит пока придираться к оформлению), просто суть объясните... Если конечно разберете мой ужасный код)

GBee
16.12.2011, 18:43
Я Мука не читал, но вряд ли он начал рассказывать про переменные, не коснувшись их типа. А передача по ссылке и по значению это вообще святое.

Добавлено через 14 минут
Строки передаются по значению, хотя здесь это особой роли не играет.

1) name ничего не содержит. - var name;
2) Объявляем petName и пихаем в него, то что содержит name (ничего) - var petName = name;
3) Пихаем строку в name - name = "Petya", petName от этого не изменится.

Добавлено через 32 минуты
Хм, Мук на типы положил до 183 страницы. Теперь понятно, почему так много тем про виртуальный зоопарк.

Pronoob
16.12.2011, 22:04
А почему нельзя сразу пихнуть в "petName" строку "Petya" ? Что меняется, зачем нужна эта переменная name, называемая "именем переменной"

TanaTiX
16.12.2011, 22:23
Если вы хотели создать переменную со значением, то так.
var petName:String = "Petya";

goodguy
16.12.2011, 22:33
А почему нельзя сразу пихнуть в "petName" строку "Petya" ? Что меняется, зачем нужна эта переменная name, называемая "именем переменной"
Да не нужна она нафиг. Можно не париться. Да, можно присвоить ей значение сразу. Я вообще не понимаю зачем Колин начал с такой хрени. Помнится тоже этого не понимал, когда читал эту книжку.
Я Мука не читал, но вряд ли он начал рассказывать про переменные
Тем не менее, это так ) Он действительно начал рассказывать об этом. Причем это не гон переводчика. Так написано и в оригинале.

HardCoder
16.12.2011, 22:39
А вот вопрос по теме. Можно ли сделать переменную ссылкой на другую переменную, но так, чтобы превая всегда имела значение второй (то есть при изменении второй, автоматически изменялось значение первой). Что-то типа [Bindable] в flex, но на чистом АС3. Пока слабо представляю, зачем такое может пригодится, просто так - спортивный интерес.

dimarik
16.12.2011, 22:43
Можно.

HardCoder
16.12.2011, 23:01
Можно.Это хорошо.

Inet_PC
16.12.2011, 23:05
Это хорошо
До поры, до времени.

HardCoder
16.12.2011, 23:09
Это хорошо
До поры, до времени.А че так?
dimarik, наверное это не так?:private var var2:Number;
trace(var1);
private function get var1():Number{
return var2;
}

fish_r
16.12.2011, 23:28
@Pronoob (http://www.flasher.ru/forum/member.php?u=131098). Вы это может про статики читаете? В каком контексте это?

goodguy
16.12.2011, 23:33
А вот вопрос по теме. Можно ли сделать переменную ссылкой на другую переменную, но так, чтобы превая всегда имела значение второй (то есть при изменении второй, автоматически изменялось значение первой). Что-то типа [Bindable] в flex, но на чистом АС3. Пока слабо представляю, зачем такое может пригодится, просто так - спортивный интерес.

Только для сложных типов данных

Inet_PC
16.12.2011, 23:48
А че так?
Bindable это медленно (по крайней мере как это реализовано во флексе). Ну и рано или поздно в любом проекте чуть больше HelloWorld, что нибудь заглючит или изменится что-то и отладить его (когда все везде изменяется автоматически) будет трудно, возможно даже придется немало переписать. Любое приложение на флексе с кучей Bindable жутко тормозит, хотя по-большому счету там и тормозить нечему. Возможно я просто не умею его готовить, хз.

HardCoder
16.12.2011, 23:50
Только для сложных типов данныхprivate var mc1:MovieClip = new MovieClip();
private var mc2:MovieClip = new MovieClip();
private var spr:Sprite = new Sprite();

private var var1:MoviClip = mc1;

spr.mask = var1;
//В процессе работы:
var1 = mc2;
//
trace(spr.mask == mc2);//falseКак сделать, чтобы было true, а не false?

dimarik
16.12.2011, 23:54
Все "переменные" заменяем на акцессоры.
И Flex в Bindable не тормозит. Там особо тормозить нечему. На "чисто пацанском" AS3, уверяю, будет такой же тормоз для такой функциональности.

Inet_PC
17.12.2011, 00:14
А я и нигде и не писал, что на чистом AS3 bindable будет быстрее, чем на Flex. Я имел ввиду реализацию в других языках.
будет такой же тормоз для такой функциональности.
Именно.

HardCoder
17.12.2011, 00:33
private var mc1:MovieClip = new MovieClip();
private var mc2:MovieClip = new MovieClip();
private var spr:Sprite = new Sprite();
private var _var1:MovieClip = mc1;

spr.mask = var1;//Маскирует обьектом mc1
var1 = mc2;//Не маскирует обьектом mc2

private function set var1(mc:MovieClip):void{
_var1 = mc;
}

private function get var1():MovieClip {
return _var1;
}Выходит, мне надо в сеттере var1 дописать строчкуspr.mask = mc;Думал, по-проще будет...