AS3中的隐式vs显式getter/setter,使用哪些以及为什么?

Jam*_*mes 4 coding-style actionscript-3 getter-setter

自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;
}
Run Code Online (Sandbox Code Playgroud)

并且避免像这样工作:

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;
}
Run Code Online (Sandbox Code Playgroud)

我已经避免部分使用AS3的隐式getter/setter,这样我就可以开始输入"get ..",内容辅助将为我提供所有getter的列表,同样也适用于我的setter.我也不喜欢我的代码中的下划线,这让我摆脱了隐含的路径.

另一个原因是我更喜欢这种感觉:

whateverObject.setLoggy( "loggy's awesome new value!" );
Run Code Online (Sandbox Code Playgroud)

对此:

whateverObject.loggy = "loggy's awesome new value!";
Run Code Online (Sandbox Code Playgroud)

我觉得前者更好地反映了代码中实际发生的事情.我正在调用函数,而不是直接设置值.

安装Flash Builder和伟大的新插件SourceMate(这有助于获得FDT在FB中出名的一些有用功能)后,我意识到当我使用SourceMate的"生成getter和setter"功能时,它会自动使用隐式设置我的代码路线:

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;
}
Run Code Online (Sandbox Code Playgroud)

我认为这些SourceMate人员必须知道他们在做什么,或者他们不会在AS3中编写用于编码的工作流增强插件,所以现在我在质疑我的方式.

所以我的问题是:任何人都可以给我一个很好的理由,为什么我应该放弃我明确的g/s方式,开始使用隐式技术,并为我的私人变量接受那些臭的小_underscores?还是以我的方式支持我做事的原因?

fen*_*mas 19

说实话,我认为这很像缩进或支撑风格 - 将您的风格与您正在使用的任何代码库相匹配的重要性/乐于助人的任何"固有"优势都会超越任何一种方法.尽管如此,你更愿意在物理引擎中维护哪一个?

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

// without
body.getPosition().setY( body.getPosition().getY() + body.getVelocity.getY() * dt );
Run Code Online (Sandbox Code Playgroud)

getter/setter的另一个优点是,您最初可以创建属性简单的公共变量,并在以后根据需要将它们重构为getter/setter,而无需更改外部代码.您不必为每个变量预先构建访问器; 你可以等到你决定需要它们.