Другое

Что такое геттеры и сеттеры: терминология и сравнение методов

Lorem ipsum dolor

Геттеры и сеттеры встречаются во многих популярных языках программирования:

  • Java,
  • JavaScript,
  • PHP,
  • C,
  • и др.

Где бы ни использовались геттеры и сеттеры, у них одна цель — защитить содержимое ваших скриптов, когда ими пользуется кто-нибудь другой.

 

Геттеры и сеттеры

Геттеры и сеттеры — это методы доступа, которые помогают вам управлять доступом к различным переменным в коде. В скриптах они пишутся так:

  • get (он же геттер) — применяется для чтения переменной;
  • set (он же сеттер) — применяется для записи переменной.

Чтобы лучше понять, как работают геттеры и сеттеры, нужно показать это на примере.

 

Геттеры и сеттеры для кваса

Итак, представим, что у нас есть собственная квас-машина наподобие кофе-машины, только с пивом:

function KvassMachine(power) {

//определяем, сколько кваса в нашей машине

this.kvassAmount = 0

...

}

 

Вроде бы все хорошо, в нашей квас-машине пока просто нет кваса, и мы можем в нее залить этот божественный прохладный напиток. Но на самом деле «kvassAmount» является общедоступным, а это значит, что в него кто угодно может залить сколько угодно кваса, а может, даже несколько человек сразу. В результате у нас может получиться что-то такое:

//Наша квас-машина столько литров кваса не вместит!

kvassMachine.kvassAmount = 100000;

 

Но и это еще не все. Может получиться так, что кваса выпьют больше, чем вмещает наша квас-машина, например:

 

//никого не тревожит, что наша квас-машина вмещает всего 50 литров кваса, все просто подходят и пьют

kvassMachine.kvassAmount = -100000;

 

«Почему такой бардак с квасом происходит?» спросите вы. А все потому, что объем нашей квас-машины доступен снаружи и абсолютно всем. Абсолютно любой может к ней обратиться и добавить или взять кваса столько, сколько захочет. Для того чтобы такого не происходило, необходимо задать ограничение на использование нашей квас-машины со стороны остальных «любителей кваса».

Обычно контролировать в таких ситуациях можно при помощи приватного свойства, а записывать нужное значение при помощи сеттера. В нашем варианте это будет «setKvassAmount». Например:

function KvassMachine(power, volume) { // volume — это объем нашей квас-машины

var kvassAmount = 0;

 

var KVASS_COOL_VOLUME = 50;

 

function getTimeToBoil() {

return Amount * KVASS_HEAT_VOLUME * 40 / power;

}

 

// останавливаем квас-машину "с умом"

this.setkvassAmount = function(amount) {

if (amount< 0) {

throw new Error("Не может быть отрицательного значения");

}

if (amount > volume) {

throw new Error("Невозможно наливать большее количество кваса, чем " + volume);

}

 

kvassAmount = amount;

};

 

function onReady() {

alert( 'Охлажденный квас!' );

}

 

this.run = function() {

setTimeout(onReady, getTimeToBoil());

};

 

}

 

var kvassMachine = new KvassMachine(100, 50);

kvassMachine.setkvassAmount(500); // вот вам и ошибка!

 

Ошибка произошла, потому что «kvassAmount» это внутреннее свойство, которое можно «переписать», но пока невозможно «считать». Чтобы у внешних «любителей кваса» была возможность узнавать значение нашего свойства, нужно воссоздать особую функцию — геттер. В нашем случае это будет getKvassAmount. Например:

function KvassMachine(power, volume) {

//...

this.setKvassAmount = function(amount) {

if (amount< 0) {

throw new Error("Не может быть отрицательного значения");

}

if (amount > volume) {

throw new Error("Невозможно наливать большее количество кваса, чем " + volume);

}

 

kvassAmount = amount;

};

 

this.getKvassAmount = function() {

return kvassAmount;

};

}

 

var kvassMachine = new KvassMachine(100, 50);

kvassMachine.setKvassAmount(500);

alert( kvassMachine.getKvassAmount() ); // 500

 

Заключение

Геттеры и сеттеры призваны помочь контролировать переменные от внешнего вмешательства. А вам, в свою очередь, дают возможность безопасно читать и менять значения самой переменной.

Схожие статьи

Как создать собственное мобильное приложение: руководство от А до Я
Другое

Как создать собственное мобильное приложение: руководство от А до Я

Exim4 команды: какие из них самые полезные. Настройка в Debian
Другое

Exim4 команды: какие из них самые полезные. Настройка в Debian

На каком языке программирования пишут игры для ПК, какой выбрать?
Другое

На каком языке программирования пишут игры для ПК, какой выбрать?

Другое

Современные способы хранения данных на компьютере, ноутбуке или лаптопе

×