Геттер (программирование)

Из Википедии, бесплатной энциклопедии

Метод чтения, геттер (англ. getter — получатель) — (в программировании) специальный метод, позволяющий получить данные, доступ к которым напрямую ограничен. Это один из методов объектно-ориентированного программирования, который помогает реализовать гибкий механизм инкапсуляции. В паре с сеттером (Setter) он может использоваться для организации свойств и методов в языках, где они не поддерживаются.

class Foo {       private int data;     private boolean flag;       public void setData(int data) {         this.data = data;     }      public int getData() {         return data;     }       public void setFlag(boolean flag) {         this.flag = flag;     }      // Для boolean свойств рекомендуется использовать префикс is, а не get     public boolean isFlag() {         return flag;     } } 
 class Foo  {  private:    int m_data;  public:    void setData (int data)    {       m_data = data;    }    int getData () const    {       return m_data;    }  } 
type    TFoo = class   private     FData: Integer;   public     function GetData: Integer;     procedure SetData(const ANewData: Integer);     property Data: Integer read GetData write SetData;   end;   function TFoo.GetData: Integer; begin   Result := FData; end;   procedure TFoo.SetData(const ANewData: Integer); begin   FData := ANewData; end; 

В данном примере доступ к скрытому полю FData обеспечивается через методы SetData (сеттер) и GetData (геттер)

  class Foo     attr_accessor :bar # синтаксический сахар Ruby для автоматического                        # создания getter'а и setter'а для переменной bar   end      foo = Foo.new   foo.bar = 42  # вызов foo.bar=(42) (setter)   foo.bar       # вызов foo.bar (getter) 
var Foo = function (bar) {    this.bar = bar; }; Foo.prototype = {    get bar () {       console.log('bar getter');       return this._bar;    },    set bar (bar) {       console.log('bar setter');       this._bar = bar;    } };  var foo = new Foo(15); foo.bar = 123; // bar setter console.log(foo.bar); // bar getter, 123 

В PHP отсутствует прямой механизм использования геттеров, поэтому их реализуют через «волшебный» метод __get()

<?php  class Foo {     private $data;      public function  __get($name)     {         $method = 'get'.ucfirst($name);                 if (method_exists($this, $method)) {             return $this->$method();         }     }      public function getData()     {         return $this->data;     } } 

В C# геттеры и сеттеры используются в механизме свойств. Геттеру соответствует ключевое слово get, сеттеру — set. В версии 3 появился автоматический геттер.

class Foo {      private int id;      private string name;      public int ID      {          get { return id; }      }      public string Name      {          get { return name; }          set { this.name = value; }      }      public string SomeProperty      {          get;          set;      } } 

В VB.NET для создания геттера обязатально необходимо указать модификатор ReadOnly если не используется сеттер. Автореализуемые свойства появились начиная с VB 10.0, то есть нет необходимости писать реализацию свойства, достаточно объявления.

Public Class Foo     Private m_Data As Integer 'Закрытое поле с данными      Public Property Message As Integer 'Автореализуемое свойство, начиная с VB 10.0      Public ReadOnly Property Data As Integer 'Открытое свойство только для чтения         Get             Return m_Data         End Get     End Property End Class 

В Python геттер и сеттер класса можно сделать с помощью декоратора @property, атрибуты, которые начинаются с __ помечаются как доступные только внутри объекта.

class Foo:           def __init__(self, data=None):         self.__data = data                 @property     def data(self):         return self.__data           @data.setter     def data(self, value):         self.__data = value 

Примечания

[править | править код]