4

自从 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?或者支持我以我的方式做事的理由?

4

3 回答 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,而无需更改外部代码。您不必为每个变量预先构建访问器;您可以等到您决定需要它们。

于 2010-05-24T01:10:56.520 回答
2

我能想到几个原因。

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

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

于 2010-05-24T01:01:04.307 回答
0

我不使用隐式 getter,因为 if 会强化重构和代码可读性。如果分配是针对公共字段还是访问器方法,通常不太容易发现。因此,如果您想跟踪一个错误,您可能会陷入令人讨厌的狩猎。

于 2012-07-02T10:50:25.547 回答