Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   сеттер и геттер (http://www.flasher.ru/forum/showthread.php?t=140966)

dandelion 11.06.2010 20:06

сеттер и геттер
 
Добрый день!

Объясните пожалуйста смысл сеттрев и геттрев, помимо разницы в вызове.
В чём принципиальное различие:

Код AS1/AS2:

var a:String
 
function setA (value:String):void {
        a = value;
}
 
setA("abc");

от:
Код AS1/AS2:

var a:String;
 
function set A(value:String) {
        a = value;
}
 
A = "a";

и тоже самое с геттером.

что то я где то упустил:)

Kuruki 11.06.2010 20:15

Только в синтаксисе

Psycho Tiger 11.06.2010 20:34

Код AS3:

a++;
setA(getA()+1);

Первое приятней.

easy.proger 12.06.2010 14:09

Разница в том, что при "set a" можно обратиться к свойству "a" приблизительно так

Код AS3:

var someClass:SomeClass = new SomeClass();
someClass.a = 123;

Разница между сеттером и публичным свойством заключается в том, что мы можем обработать поступившие данные как нам удобно к примеру

Код AS3:

public function set a(num:Number):void
{
      _a = num*2;
}
 
var someClass:SomeClass = new SomeClass();
someClass.a = 10;

Мы получим _а = 20; тогда как если бы было просто свойство например
public var a:Number;

Код AS3:

var someClass:SomeClass = new SomeClass();
someClass.a = 10;

Мы бы получили 10

думаю мысль донес )

-De- 12.06.2010 14:26

Кэп сообщает, что сеттер/геттер - это функции, в отличии от. И разница как между переменной и функцией.

NeonSelf 12.06.2010 19:18

ТОВАРИЩИ!!! Сеттер и геттер намного полезнее чем здесь описано,приведу несколько примеров:

1) нужно сделать в обьекте переменную, доступную только для чтения извне, но не для установки - тогда сама переменная делается private, и создается функция-геттер выдающая ее значение (для свойств-обьектов придется сначала сделать копию этого обьекта, чтобы не выдывать геттером ссылку на приватный обьект)

2) если добавление нового свойства создает избыточность данных. типичный пример - вектор (x,y) у которого иногда нужно узнавать длину length. Очевидно, что длина - значение вычисляемое, а значит его хранить не обязательно, можно написать геттер, который будет вычислять длину по значениям текущих координат вектора : return Math.sqrt(x*x+y*y)

да и для читабельности кода геттер и сеттер лучше, чем явный вызов методов

главное - нужно помнить, что удобство написания кода и скорость его выполнения - совсе разные вещи, поэтому в критических местах все-таки приходится кешировать избыточную информацию в виде отдельных переменных (как например длина вектора). даже сам Adobe этим не гнушается, вспомнитье хотябы свойство всех отображаемых обьектов "cacheAsBitmap"

dimarik 12.06.2010 21:32

Цитата:

Сообщение от NeonSelf (Сообщение 914996)
ТОВАРИЩИ!!! Сеттер и геттер намного полезнее чем здесь описано,приведу несколько примеров:

Спасибо, что напомнили нам и разъяснили молодежи, но можно ли без "!!!!"? Выглядит очень вульгарно.

dandelion 15.06.2010 14:30

спасибо, смысл всего понял)


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

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