自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 ..”。.内容辅助将为我提供所有Getters的列表,以及对于播放器的列表。我也不喜欢我的代码下强调,这使我脱离了隐式路线。

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

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

为此:

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

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

安装Flash Builder和Great New插件之后 酸菜 (这有助于获得FDT在FB中著名的一些有用功能)我意识到,当我使用Sourcemate的“生成Geters and Setters”功能时,它会使用隐式路由自动设置我的代码:

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

我认为这些官方人必须知道他们在做什么,否则他们不会编写用于AS3中编码的工作流程增强插件,所以现在我正在质疑自己的方式。

因此,我对您的问题是:有人可以给我一个充分的理由,为什么我应该放弃明确的G/S方式,开始使用隐式技术,并为我的私人Vars接受那些臭的小_underscores吗?还是以我以自己的方式做事的理由支持我?

有帮助吗?

解决方案

老实说,我认为这很像是缩进或支撑风格 - 将您的样式与您合作的任何代码库相匹配的重要性/帮助性在任何一种方法上都具有任何“固有”优势。话虽如此,您宁愿在物理引擎中保留哪些?

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

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

Getters/Setter的另一个优点是,您始终可以使属性最初使属性简单的公共变量,并在需要时将其重构为Getters/Setter,而无需更改外部代码。您不必为每个变量构建访问者;您可以等到决定需要它们。

其他提示

我能想到一些原因,这是我头顶的最高点。

  1. 隐式GET/SET提供更好/更轻松的数据结合功能。将事件连接起来并适合“ Flex模型”要容易得多。
  2. 它使您生成的Asdoc更加简洁。
  3. 我相信,这是在设计视图中工作时在属性检查员中获取物业的唯一方法。

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top