Форум 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=125128)

GBee 17.05.2009 23:44

О! Давно хотел узнать имеет ли смысл создавать геттер/сеттер, если они не делают никаких проверок и
Цитата:

1. Что бы выполнить ряд операции связанные с изменением значения, типа рассылка событий, изменение связанны данных.
2. Сделать свойство доступным только для чтения или записи.
и т.п.,а работают как в примере автора. Только про инкапсуляцию мозг не напрягайте.

Fatality 18.05.2009 01:20

Например:
Код AS3:

package 
{
        public class SomeClass {
                private var prop:String;
                public function SomeClass() {
                        trace("я пустой констурктор");
                }
                public function get mail():String {
                return prop;
                }
                public function set mail(str:String):void {
                if (str.indexOf('@') > -1) prop = str;
                else prop = "я некорректное мыло, проверь меня правильно, через регвыр !";
                }
        }
}

В другом классе в это же время:
Код AS3:

var cls:SomeClass = new SomeClass();
cls.mail = "abs@mail.com"; //сработает set;
trace(cls.mail); //сработает get

Смысл в том, что:
Во первых, мы имеем возможность изменить значение закрытого свойства prop из вне. Во вторых — и это главное, есть возможность предпринять определенные действия присваивая значение свойству. В нашем случае, мы производим допотопную проверку адреса на валидность.

dimarik 18.05.2009 01:27

Цитата:

Сообщение от GBee (Сообщение 820722)
О! Давно хотел узнать имеет ли смысл создавать геттер/сеттер, если они не делают никаких проверок и и т.п.,а работают как в примере автора. Только про инкапсуляцию мозг не напрягайте.

Давно еще проходил курс молодого "малОго" от родителей, бабушки с дедушкой на предмет: внешний мир не стоьл дружелюбен, как может показаться. С тех пор я просто очкую писать public var.

Gaen 18.05.2009 01:53

Цитата:

Сообщение от willis83 (Сообщение 820504)
я человек тёмный, и приведите мне пример зачем прятать переменные в классе чтобы доставать их через геттеров??? Уже вроде не новичёк в AS3, но не пойму зачем переменную делать private чтобы потом её вытягивать через get. Намного проще объявить её пабликом и работать с ней как со свойством класса.... ну тупой я ..... чё уж тут сделать?

Мне часто приходилось писать классы-контейнеры для графики с особым поведением. Размеры графики чаще всего были больше размеров видимой области (маски). Соответственно нужно было переопределять width и height, чтобы геттеры возвращали размеры маски, а сеттеры растягивали маску и не искажали при этом внутреннюю графику.

GBee 18.05.2009 08:19

Fatality, вы привели пример, когда я бы без вопросов использовал проперти. Я говорю о
Код AS3:

public function get mail():String 
{
  return _mail;
}
public function set mail(str:String):void
{
  _mail = str;
}

вместо public var mail:String

Есть ли смысл использовать такие с/геттеры не болея агорафобией?

2 dimarik, ага я вот тоже, как-то на автомате, со страхом их пишу, а когда думаю зачем, не пойму.

etc 18.05.2009 08:31

В сеттерах нужно обязательно делать проверку на текущее значение.


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

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