Геттер (программирование)
Метод чтения, геттер (англ. 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