Конечно, вы знаете о сеттерах и геттерах, а кто нет? (Если это вы, вы, возможно, захотите освежить в памяти объектно-ориентированное программирование с моим учебником Введение в ООП ). Но зачем их использовать? Зачем создавать дополнительные функции, чтобы обернуть свойство? Вот пять причин, которые невероятно полезны.
Лично я использую каждую из этих причин, по крайней мере, один раз в день ..
Причина 1. Вы можете создавать свойства только для чтения (или только для записи)
Сделав фактическое свойство закрытым и написав просто открытый метод получения (без соответствующего метода установки), вы можете предоставить доступ к чтению значения, но запретить изменение значения вне класса. Это полезно для объектов неизменных значений, которые несут кучу данных, но никогда не должны изменяться после создания. Это и еще около 500 других причин использовать свойства только для чтения.
Причина 2: Вы можете выполнить проверку и автоматически исправить входящие значения
Числовые свойства часто требуют числа между определенным набором значений или округленного с определенной точностью. Вы можете сделать это ограничение или округление в установщике, чтобы гарантировать чистые значения, или, если требуется, вы можете выполнить эту обработку «на лету» в получателе, чтобы хранить значение полной точности внутри, но обеспечить чистое значение на улицу.
Точно так же вы можете предоставить значения по умолчанию или обрабатывать нулевые значения с небольшим количеством логики. Предположим, у вас есть объект 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 : «Определение сеттера не может иметь необязательные параметры».
Причина 3: Вы можете синтезировать данные
Представьте себе тот же объект Person из последней причины с его свойствами firstName
и lastName
. Чтобы также реализовать свойство fullName
, вы можете создать фактическое свойство и обязательно обновлять fullName
каждый раз, когда lastName
свойства firstName
и / или lastName
. Или вы можете просто создать fullName
получения fullName
который возвращает автоматическую конкатенацию имени и фамилии:
1
2
3
|
public function get fullName():String {
return firstName + » » + lastName;
}
|
Причина 4: Вы можете скрыть более значительную логику за простым свойством
У вас может быть класс Button
который инкапсулирует Sprite
и обрабатывает большую часть интерактивности. «Активный» установщик может принять простое Boolean
значение и превратить его в более сложную логику, которая добавляет или удаляет прослушиватели событий, включает или отключает курсор в виде руки и включает или отключает свойство mouseEnabled
в Sprite
.
Причина 5: Вы можете вызвать визуальные изменения от изменения свойства
Это следует из последней причины. Что если у вас есть объект Slider
, который был представлен на экране, вы знаете, элементом интерфейса Slider
. Предположим, у этого объекта есть свойство value
. Реализуя установщик для значения, вы можете не только установить фактическое свойство для этого числа, но и затем обновить визуальные элементы, необходимые для перемещения маркера ползунка в нужное положение.
В качестве бонусной функции, реализация этого способа также позволит вам использовать движок анимации для объекта Slider
и анимацию значения. Большинство движков анимации позволяют вам анимировать любое числовое свойство любого объекта, даже свойства, которые действительно являются установщиками и получателями.