Неявные против явных получателей / установщиков в AS3, что использовать и почему? - PullRequest
4 голосов
/ 24 мая 2010

С момента появления AS3 я работал так:

private var loggy:String;

public function getLoggy ():String
{
  return loggy;
}

public function setLoggy ( loggy:String ):void
{
  // checking to make sure loggy's new value is kosher etc...
  this.loggy = loggy;
}

и старался не работать так:

private var _loggy:String;

public function get loggy ():String
{
  return _loggy;
}

public function set loggy ( loggy:String ):void
{
  // checking to make sure loggy's new value is kosher etc...
  _loggy = loggy;
}

Я частично избегал использования неявных методов получения / установки AS3так что я могу просто начать набирать «get ..», и помощник по контенту выдаст мне список всех моих получателей, а также для моих установщиков.Мне также не нравятся подчеркивания в моем коде, которые отключили меня от неявного маршрута.

Другая причина состоит в том, что я предпочитаю чувствовать это:

whateverObject.setLoggy( "loggy's awesome new value!" );

этому:

whateverObject.loggy = "loggy's awesome new value!";

Мне кажется, что первое лучше отражает то, что на самом деле происходит в коде.Я вызываю функции, а не задаю значения напрямую.

После установки Flash Builder и замечательного нового плагина SourceMate (который помогает получить некоторые полезные функции, которые есть в FDTизвестен в FB) Я понял, что когда я использую функцию «создания геттеров и сеттеров» в SourceMate, она автоматически устанавливает мой код, используя неявный маршрут:

private var _loggy:String;

public function get loggy ():String
{
  return _loggy;
}

public function set loggy ( loggy:String ):void
{
  // do whatever is needed to check to make sure loggy is an acceptable value
  _loggy = loggy;
}

Я считаю, что эти люди из SourceMate должны знать, что ониделали, иначе они бы не писали плагины для улучшения рабочих процессов для кодирования в AS3, поэтому теперь я задаю себе вопрос.

Итак, мой вопрос к вам: может кто-нибудь дать мне вескую причину, почему я должен отказаться от своегоявные способы g / s, начать использовать неявную технику и использовать эти вонючие маленькие _underscores для моих личных переменных?Или поддержите меня в том, что я делаю так, как я?

Ответы [ 3 ]

19 голосов
/ 24 мая 2010

Честно говоря, я думаю, что это во многом похоже на отступ или стиль скобок - где важность / полезность соответствия вашего стиля любой кодовой базе, с которой вы работаете, затмевает любое «неотъемлемое» преимущество любого подхода. С учетом сказанного, какой из них вы бы предпочли поддерживать в физическом движке?

// with getters
body.position.y += body.velocity.y * dt;

// without
body.getPosition().setY( body.getPosition().getY() + body.getVelocity.getY() * dt );

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

2 голосов
/ 24 мая 2010

Я могу подумать о нескольких причинах из головы.

  1. Неявный get / set предлагает лучшую / более легкую функциональность привязки данных. Проще связать события и вписать в «модель Flex» гораздо приятнее.
  2. Это делает ваш сгенерированный ASDoc намного более лаконичным.
  3. Я считаю, что это единственный способ получить свойство в инспекторе свойств для пользовательских компонентов при работе в режиме конструктора.

Имейте в виду, что если все, что вы делаете, - это прямое получение / установка, то не все будет потеряно, если просто открыть публичную переменную и обойти метод получения / установки с удерживающей переменной (_variable). Вы всегда можете перейти к неявному get / set позже, не изменяя внешний интерфейс классов.

0 голосов
/ 02 июля 2012

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

...