Геттер (программирование)
Из Википедии, бесплатной энциклопедии
В статье не хватает ссылок на источники (см. рекомендации по поиску). |
Метод чтения, геттер (англ. getter — получатель) — (в программировании) специальный метод, позволяющий получить данные, доступ к которым напрямую ограничен. Это один из методов объектно-ориентированного программирования, который помогает реализовать гибкий механизм инкапсуляции. В паре с сеттером (Setter) он может использоваться для организации свойств и методов в языках, где они не поддерживаются.
Примеры
[править | править код]Java
[править | править код]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; } }
C++
[править | править код] class Foo { private: int m_data; public: void setData (int data) { m_data = data; } int getData () const { return m_data; } }
Delphi
[править | править код]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
(геттер)
Ruby
[править | править код] 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)
Javascript
[править | править код]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
[править | править код]В 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#
[править | править код]В 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
[править | править код]В 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
[править | править код]В 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