1

したがって、actionscript 3 では、Object クラスのインスタンスを連想配列として使用できます。

var doNotHaveSexWith:Object = new Object();
doNotHaveSexWith['mum'] = new Person(...);
doNotHaveSexWith['dad'] = new Person(...);
doNotHaveSexWith['dave'] = new Person(...);

いくつかのクラスがあり、そのメンバーの 1 つは、私のコレクションを含む読み取り専用の「オブジェクト」であるとします。

この「オブジェクト」を返すと、コードの可読性が大幅に低下すると思います。誰かがそれがコレクションであることを知る唯一の方法は、コードまたはコメントを読むことです...

オブジェクトが単純なオブジェクトではなくコレクションであることを知らせる最良の方法は何ですか?

オプション:

  • 「AssociativeArray」などと呼ばれるオブジェクトから拡張するだけの動的クラスを作成して、コードが読みやすくなるようにします...

  • AS3 Datastructures Libraryのようなものを使用しますが、これは少しやり過ぎのように思えます。

  • 変数名の末尾に Collection という単語を追加するだけですか?

例えば:

var hotPeopleCollection:Object = new Object();
hotPeopleCollection['me'] = new Person(...); 
hotPeopleCollection['sandrasully'] = new Person(...);

どう思いますか?

更新: Dictionary を拡張するカスタム クラスを使用することにしました。このようにして、検索関数hasOwnPropertyを賢明なアクセス関数でラップし、クラスに意味のある名前を付けることができます。

私が Object よりも Dictionary を選んだ理由は 2 つあります。

  1. ディクショナリは、コレクションをより直感的に理解します
  2. Dictionary、検索のために O(1) で実行されるようです。このかなり非公式の辞書と配列とオブジェクトのパフォーマンス ベンチマークを参照してください
4

2 に答える 2

2

辞書を使う。

http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/utils/Dictionary.html

キーには文字列を使用できますが、それに関しては任意のオブジェクトを使用できます。

var dict:Dictionary = new Dictionary();
var obj:Object = new Object();
var key:Object = new Object();
key.toString = function() { return "key" }

dict[key] = "Letters";
obj["key"] = "Letters";

dict[key] == "Letters"; // true
obj["key"] == "Letters"; // true 
obj[key] == "Letters"; // true because key == "key" is true because key.toString == "key"
dict["key"] == "Letters"; // false because "key" === key is false
delete dict[key]; //removes the key

多くの開発者(私を含む)はあなたに言うでしょう:オブジェクトを決して使用しないでください。あなたは基本的にあなたのコンパイラを目隠ししています。常に組み込みのデータ型を使用するか、独自のデータ型を作成してください。この場合、明らかに辞書については知りませんでしたが、原則として、単純な古いObjectデータ型を使用したい場合は、もう一度考えてみてください。

アップデート:

あなたが役立つかもしれない別のリンク:

http://www.gskinner.com/blog/archives/2006/07/as3_dictionary.html

于 2009-10-14T23:53:57.410 に答える
0

逆に大嫌いなダイナミック型のスタンスを吐き出します。オブジェクトを使用するだけです。連想配列です。変数の名前とコンテキストは、それを十分に明確にする必要があります。コードを必要以上に複雑にしないでください。クラスであるべきだと思うなら、それをクラスにしてください。これは単純なマップであり、オブジェクトを使用します。

船外に出る理由はありません。

于 2009-10-15T00:21:27.367 に答える