0

このような一時変数を書くときの違いを知りたいです(これらは単なる例です):

バージョン1

for each tempEnemy in enemyManager.enemies {
var tempX:int = tempEnemy.x;
}

またはこれ:

バージョン2

for each tempEnemy in enemyManager.enemies {
tempEnemy.oldX = tempEnemy.x;
}

何が間違っているのですか?現在、バージョン2のように書いていますが、バージョン1に変更する必要があるかどうかわかりません。誰かがこれを手伝ってくれませんか。ほとんどの開発者がバージョン1のように書いていることは知っていますが、バージョン1についてまったく知らないため、少し混乱しています。バージョン1を使用する場合、値がすべてのサイクルでクリアされる一時変数に明示的に格納されることを意味しますか?

4

2 に答える 2

2

また...:variableType(int、String、Numberなど)を追加すると、コードのヒントとデバッグに役立ちます。

于 2011-11-12T03:24:24.853 に答える
1

バージョン1では、宣言は次のとおりです。

var tempX:int

for(またはfor-each)ループの反復が含まれている間だけ持続する変数を定義します。各反復tempXは、オブジェクトからの値を指定して定義さEnemyれ、最後にガベージコレクションに残されます。

バージョン2では、Enemyという名前の一時変数によって参照されるオブジェクトにアタッチされた2つの変数を参照しますtempEnemy

どちらのバージョンでも、Enemyオブジェクトへの参照tempEnemyは、次の反復のEnemyオブジェクトに再割り当てされます。

それぞれの方法には利点があります。メモリの観点からは、バージョン2の方がおそらく優れています。これは、各反復の終了時に破棄される新しい変数を作成するのではなく、既存の変数を何度も変更するためです。一方、バージョン1ではoldX、クラス変数を定義する必要はありません。クラス変数は、これらの種類の変数がないと十分に厄介になることがよくあります。

コードのベストプラクティスは、(a)コードを読んで理解できる必要がある他のプログラマーと協力すること、および(b)プロジェクトを離れて後でプロジェクトに戻ることができるようにする必要があることに基づいています。自分のコードを読んで理解する。共有する予定のない短いプロジェクトの場合、バージョン2は問題ありません(おそらくメモリ効率が高くなります)が、大規模なプロジェクトではバージョン1のようなものを使用する必要があります。

もう1つの考慮事項は、その変数が定義(設定)されている関数以外の場所でその変数を使用するかどうかです。そうでない場合は、バージョン1を指すオブジェクトに保存する必要はありません。

于 2011-11-12T03:19:13.447 に答える