преимущества getter / setter ПО сравнению с общедоступными переменными?

StackOverflow https://stackoverflow.com/questions/1949351

  •  21-09-2019
  •  | 
  •  

Вопрос

Есть ли польза в использовании:

private var _someProp:String;

public function set someProp(value:String):void
{
    _someProp = value;
}
public function get someProp():String
{
    return _someProp;
}

В отличие от простого использования:

public var someProp:String;

Я понимаю, что использование getter / setter может быть полезно, когда вам нужна дальнейшая обработка или вам нужно получать уведомления о том, когда свойство изменяется следующим образом:

public function set someProp(value:String):void
{
    _someProp = value;
    _somePropChanged = true;
    doSomethingElse();
}

Но если вам это не нужно, то есть ли какая-либо причина использовать getter / setter вместо простого использования общедоступного var?

Спасибо!!

Это было полезно?

Решение

В зависимости от вашего языка, вы должны предпочесть getter / setter заранее, потому что вы не сможете представить их позже (я смотрю на вас, Java), если окажется, что они вам действительно нужны.

Другие советы

Это действительно немного зависит от используемого вами языка / фреймворка / инструментария -

Однако при использовании геттеров и установщиков часто есть преимущества, связанные с управлением версиями и совместимостью с API.Это может быть очень полезной причиной для того, чтобы использовать их сами по себе.

На этот вопрос действительно нельзя ответить, не зная языка.Средства получения и настройки на большинстве языков стоят дороже, но в будущем они обеспечивают вам гибкость.В некоторых языках вы не можете изменить public на Getter / Setter без изменения кода в вызывающих устройствах, потому что меняется синтаксис use.Но это не проблема с C #, на котором я пишу в основном.

Получатели и установщики позволяют выполнять проверку параметров.Они позволяют вам отложить создание объектов до первой ссылки.У них много преимуществ, и я использую их всякий раз, когда мне нужно одно из этих преимуществ с самого начала.

Но я использую геттеры и сеттеры ТОЛЬКО тогда, когда они мне нужны прямо сейчас, или когда я почти уверен, что мне понадобится гибкость.В противном случае я рассматриваю их как раздувание.

В качестве дополнительного примечания, вы можете начать с общедоступного var и при необходимости преобразовать его в средство получения / установки позже в коде..в зависимости от используемого вами языка.

Если ваше свойство абсолютно бесполезно и не имеет побочных эффектов для остальной части класса - тогда во что бы то ни стало просто предоставьте его как общедоступное поле.

Просто во многих случаях ваши свойства будет имеют побочные эффекты, поэтому вам нужно контролировать, как они устанавливаются и к ним осуществляется доступ.

В качестве тривиального примера, что произойдет, если вашей общедоступной переменной не задано какое-либо значение в вашем конструкторе?Вы согласны с тем, что это значение возвращается как null?Или вы хотели бы присвоить этой переменной какое-то значение, а не возвращать null?Это простой пример, когда пользовательский геттер полезен.

Получатели и установщики также дают вам больше контроля над тем, на какие значения может быть установлена переменная.

bool setAge(int age){
   bol retVal = true;

   if(age <= 0)
       retVal = false;

   return retVal;
}

Без установщика значение могло бы быть установлено равным нулю, и могли бы произойти плохие вещи.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top