Get- и set-методы  ActionScript 

 


В предыдущем разделе мы познакомились с методами-получателями и методами- 

модификаторами, которые представляют собой открытые методы для получения 

и изменения состояния объекта. Некоторые разработчики считают подобные  

методы громоздкими. Они утверждают, что конструкция: 

pet. setNameC Jeff"): 

более неудобна в использовании, чем конструкция: 

pet.name = "Jeff": 

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

переменной, например ре t. name = " Je f f ", не является идеальной практикой  

объектно-ориентированного программирования и переменной в конечном счете может 

быть присвоено некорректное значение. Чтобы устранить несогласованность между 

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

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

ActionScript поддерживает get- и set-методы. Вызвать эти методы можно с помощью 

синтаксиса получения или присваивания значения переменной. 

Для описания get-метода используется следующий обобщенный синтаксис: 

function get имяМетода ( ) { 

операторы 

Здесь ключевое слово get указывает на то, что метод является get-методом, имя- 

Метода представляет имя метода, а операторы — это ноль или более операторов,  

выполняемых при вызове метода (ожидается, что один из операторов возвращает 

значение, связанное с методом имяМетода). 

Для описания set-метода используется следующий обобщенный синтаксис: 

function set имяМетода (новоеЗначение) { 

операторы 

Здесь ключевое слово set указывает на то, что метод является set-методом, имяМетода 

представляет имя метода, параметр новоеЗначение содержит значение, присваиваемое 

внутренней переменной экземпляра, а операторы — это ноль или более операторов, 
выполняемых при вызове метода. Ожидается, что блок операторов операторы  
определит и внутренне сохранит значение, связанное с методом имяМетода. Обратите  
внимание, что в теле set-метода оператор return не должен применяться для возврата 
значения (однако сам по себе он может быть использован для завершения метода). 
Set-методы автоматически возвращают значение, что рассматривается далее. 
Для вызова get- и set-методов применяется уникальный стиль, не требующий  
использования оператора вызова функции ( ). Get-метод х ( ) объекта ob j  
вызывается следующим образом: 
obj.x: 
Но не так: 
obj.x( ): 
Set-метод у ( ) объекта ob j вызывается следующим образом: 
obj.y = value: 
Но не так: 
obj.y(value): 
Здесь value является первым (и единственным) аргументом, передаваемым в  
метод у ( ). 
Следовательно, get- и set-методы неким магическим образом позволяют  
преобразовать синтаксис обращения к переменным экземпляра в вызовы методов. В  
качестве примера (временно) добавим get-метод с именем name ( ) в наш класс 
VirtualPet: 
public function get name ( ) { 
return petName: 
Теперь, когда в классе определен get-метод name ( ), все попытки получить  
значение переменной экземпляра name на самом деле приведут к вызову этого  
get-метода. Возвращаемое значение get-метода выглядит так, будто на самом деле было 
получено значение переменной name. Например, следующий код вызывает get- 
метод name ( ) и присваивает его возвращаемое значение переменной oldName: 
var oldName = pet.name; 
Сейчас (временно) добавим set-метод с именем name ( ) в наш класс Vi rtual Pet: 
public function set name (newName) { 
// Если длина заданного нового имени больше 20 символов... 
if (newName.length > 20) { 
// ...обрезать имя 
newName = newName.substr@. 20): 
} else if (newName == "") { 
// ...в противном случае, если заданное новое имя является 
// пустой строкой, завершить выполнение метода, не изменяя 
// значения переменной petName 
return: 
//Присвоить новое проверенное имя переменной petName 
petName = newName; 
Теперь, когда в классе определен set-метод name ( ), попытки присвоить значение 
переменной экземпляра name приведут к вызову данного set-метода. Значение, 
используемое в операторе присваивания переменной name, передается в  
set-метод, который внутренне сохраняет это значение в закрытой переменной petName. 
Например, следующий код вызывает set-метод name ( ), который внутренне  
сохраняет значение "Andreas" в переменной petName: 
pet.name = "Andreas"; 
После определения get- и set-метода с именем name ( ) переменная name  
становится всего лишь внешним фасадом. В действительности она не определена в классе, 
однако обращаться к ней можно так же, как и к любой другой существующей  
переменной. Таким образом, вы можете считать переменные экземпляра,  
сопровождаемые get- и set-методами (например, name), псевдопеременными. 
При вызове set-метода всегда вызывается соответствующий get-метод, результат 
которого возвращается из данного set-метода. Это позволяет программе  
использовать новое значение сразу после операции присваивания. Например, следующий 
код демонстрирует фрагмент приложения музыкального проигрывателя. Для  
выбора первой воспроизводимой песни используется set-метод. Благодаря вызову  
метода start ( ) над возвращаемым значением оператора присваивания переменной 
first Song сразу начинается воспроизведение выбранной песни. 
// Вызов метода start( ) над объектом new Song("dancehit.mp3") - 
// возвращаемым значением set-метода firstSong( ) 
(musicPlayer.firstSong = new Song("dancehit.mp3")).start( ): 
Хотя возможность возвращения значений из set-методов в некоторых случаях  
оказывается удобной, она накладывает ограничения на get-методы: в частности, get- 
методы не должны выполнять задачи, которые не требуются для получения  
значения соответствующей внутренней переменной. Например, с помощью get-метода 
нельзя реализовать глобальный счетчик, отслеживающий количество обращений 
к переменной. Автоматический вызов get-метода из set-метода приведет к лишнему 
увеличению значения счетчика. 
Выбор между использованием методов-получателей/-модификаторов и get-/set- 
методов — дело вкуса. В этой книге, например, get- и set-методы не используются, 
однако вы можете встретить этот подход в коде других программистов или в другой 
документации. 




BACK NEXT

Сайт является частным собранием материалов и представляет собой любительский информационно-образовательный ресурс. Вся информация получена из открытых источников. Администрация не претендует на авторство использованных материалов. Все права принадлежат их правообладателям