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 の暗黙的なゲッター/セッターの使用を部分的に避けたので、「get..」と入力し始めるだけで、コンテンツ アシストがすべてのゲッターのリストを表示し、セッターについても同様です。また、コード内のアンダースコアが嫌いで、暗黙的なルートをオフにしました。

もう1つの理由は、私がこの感じを好むということです:

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

ゲッター/セッターのもう 1 つの利点は、最初はいつでもプロパティを単純なパブリック変数にし、後で必要に応じて、外部コードを変更することなく、それらをゲッター/セッターにリファクタリングできることです。すべての変数に対して事前にアクセサーを作成する必要はありません。それらが必要であると判断するまで待つことができます。

于 2010-05-24T01:10:56.520 に答える
2

頭のてっぺんからいくつかの理由を考えることができます。

  1. 暗黙的な get/set は、より優れた/より簡単なデータ バインディング機能を提供します。イベントを結び付けるのがより簡単で、"Flex モデル" にうまく適合します。
  2. これにより、生成された ASDoc がより簡潔になります。
  3. デザイン ビューで作業しているときに、カスタム コンポーネントのプロパティ インスペクターでプロパティを取得する唯一の方法だと思います。

単純な get/set だけを行っている場合は、public var を公開し、getter/setter を保持 var (_variable) でバイパスするだけで多くが失われるわけではないことに注意してください。クラスの外部インターフェイスを変更せずに、後でいつでも暗黙的な get/set に変更できます。

于 2010-05-24T01:01:04.307 に答える
0

リファクタリングとコードの可読性を強化するため、暗黙的なゲッターは使用しません。代入先が public フィールドなのか、それともアクセサー メソッドなのかを特定するのは、通常は簡単ではありません。したがって、バグを追跡したい場合は、厄介なハンティングに陥る可能性があります。

于 2012-07-02T10:50:25.547 に答える