Статьи

AS3 101: пять причин использовать сеттеры и геттеры

Конечно, вы знаете о сеттерах и геттерах, а кто нет? (Если это вы, вы, возможно, захотите освежить в памяти объектно-ориентированное программирование с моим учебником Введение в ООП ). Но зачем их использовать? Зачем создавать дополнительные функции, чтобы обернуть свойство? Вот пять причин, которые невероятно полезны.

Лично я использую каждую из этих причин, по крайней мере, один раз в день ..


Сделав фактическое свойство закрытым и написав просто открытый метод получения (без соответствующего метода установки), вы можете предоставить доступ к чтению значения, но запретить изменение значения вне класса. Это полезно для объектов неизменных значений, которые несут кучу данных, но никогда не должны изменяться после создания. Это и еще около 500 других причин использовать свойства только для чтения.


Числовые свойства часто требуют числа между определенным набором значений или округленного с определенной точностью. Вы можете сделать это ограничение или округление в установщике, чтобы гарантировать чистые значения, или, если требуется, вы можете выполнить эту обработку «на лету» в получателе, чтобы хранить значение полной точности внутри, но обеспечить чистое значение на улицу.

Точно так же вы можете предоставить значения по умолчанию или обрабатывать нулевые значения с небольшим количеством логики. Предположим, у вас есть объект Person со свойствами firstName и lastName . Допустим, бизнес-логика приложения диктует, что эти свойства не могут быть null . Они могут быть пустыми Strings , но они не могут быть null (потому что, скажем, мы будем выполнять поиск по ним по регулярным выражениям, и было бы намного проще быть уверенным, что String существует, а не всегда проверка на null ).

Итак, в вашем сеттере у вас может быть что-то вроде этого:

1
2
3
4
public function set firstName(s:String):void {
    if (!s) s = «»;
    _firstName = s;
}

Если вы думаете, что вы могли бы сделать это с помощью значений по умолчанию для аргументов, вам следует поискать ошибку компилятора # 1123 : «Определение сеттера не может иметь необязательные параметры».


Представьте себе тот же объект Person из последней причины с его свойствами firstName и lastName . Чтобы также реализовать свойство fullName , вы можете создать фактическое свойство и обязательно обновлять fullName каждый раз, когда lastName свойства firstName и / или lastName . Или вы можете просто создать fullName получения fullName который возвращает автоматическую конкатенацию имени и фамилии:

1
2
3
public function get fullName():String {
    return firstName + » » + lastName;
}

У вас может быть класс Button который инкапсулирует Sprite и обрабатывает большую часть интерактивности. «Активный» установщик может принять простое Boolean значение и превратить его в более сложную логику, которая добавляет или удаляет прослушиватели событий, включает или отключает курсор в виде руки и включает или отключает свойство mouseEnabled в Sprite .


Это следует из последней причины. Что если у вас есть объект Slider , который был представлен на экране, вы знаете, элементом интерфейса Slider . Предположим, у этого объекта есть свойство value . Реализуя установщик для значения, вы можете не только установить фактическое свойство для этого числа, но и затем обновить визуальные элементы, необходимые для перемещения маркера ползунка в нужное положение.

В качестве бонусной функции, реализация этого способа также позволит вам использовать движок анимации для объекта Slider и анимацию значения. Большинство движков анимации позволяют вам анимировать любое числовое свойство любого объекта, даже свойства, которые действительно являются установщиками и получателями.