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

问题描述 投票:4回答:3

自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的隐式getter / setter,这样我就可以开始输入“get ..”,内容辅助将为我提供所有getter的列表,同样也适用于我的setter。我也不喜欢我的代码中的下划线,这让我摆脱了隐含的路径。

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

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

对此:

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

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

安装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;
}

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

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

actionscript-3 coding-style getter-setter
3个回答
19
投票

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

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

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

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


2
投票

我可以想到几个原因。

  1. 隐式get / set提供更好/更容易的数据绑定功能。连接事件更容易,并且更适合“Flex模型”。
  2. 它使您生成的ASDoc更加简洁。
  3. 我相信,当您在设计视图中工作时,这是在属性检查器中获取自定义组件的属性的唯一方法。

请记住,如果您所做的一切都是直接获取/设置,那么只需暴露公共var并使用保持var(_variable)绕过getter / setter就不会丢失很多。您可以随时更改为隐式get / set,而无需更改类外部接口。


0
投票

我不使用隐式getter,因为如果硬化重构和代码可读性。如果分配是公共领域或者是访问方法,通常不容易发现。因此,如果你想跟踪一个错误,你可能会陷入讨厌的狩猎。

© www.soinside.com 2019 - 2024. All rights reserved.