with ステートメントの回避

ActionScript 2.0 の学習者にとって、with ステートメントの使い方は非常にわかりにくい概念の 1 つです。with ステートメントを使用している次のコードを見てみましょう。

this.attachMovie("circleClip", "circle1Clip", 1);
with (circle1Clip) {
    _x = 20;
    _y = Math.round(Math.random()*20);
    _alpha = 15;
    createTextField("labelTxt", 100, 0, 20, 100, 22);
    labelTxt.text = "Circle 1";
    someVariable = true;
}

このコードでは、ライブラリからムービークリップインスタンスをアタッチし、with ステートメントを使用してプロパティを変更しています。変数のスコープを指定しないと、どこでプロパティを設定しているかわからなくなる場合があるので、難解なコードになります。上のコードで、someVariablecircle1Clip ムービークリップに対して設定されるように見えますが、実際には SWF ファイルのメインタイムライン内に設定されます。

with ステートメントを使用するのではなく、変数のスコープを明示的に指定した方が、コード内で何が起きているかを簡単に追うことができます。次の例は多少長くなっていますが、より適切な、変数スコープを指定した ActionScript の例です。

this.attachMovie("circleClip", "circle1Clip", 1);
circle1Clip._x = 20;
circle1Clip._y = Math.round(Math.random()*20);
circle1Clip._alpha = 15;
circle1Clip.createTextField("labelTxt", 100, 0, 20, 100, 22);
circle1Clip.labelTxt.text = "Circle 1";
circle1Clip.someVariable = true;

このルールの例外として、シェイプを描画するために描画 API を使用する場合に、描画 API の機能上、同じメソッド (lineTocurveTo など) に対して類似の呼び出しを何度も実行することがあります。たとえば、単純な矩形を描画する場合でも、次のコードに示すように、lineTo メソッドを別々に 4 回呼び出す必要があります。

this.createEmptyMovieClip("rectangleClip", 1);
with (rectangleClip) {
    lineStyle(2, 0x000000, 100);
    beginFill(0xFF0000, 100);
    moveTo(0, 0);
    lineTo(300, 0);
    lineTo(300, 200);
    lineTo(0, 200);
    lineTo(0, 0);
    endFill();
}

このような場合は、個々の lineTo メソッドや curveTo メソッドをすべて完全修飾インスタンス名で記述すると、コードの外見がすぐに混み合ってしまい、解読やデバッグが困難になります。


 

このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート

現在のページ: http://livedocs.adobe.com/flash/9.0_jp/main/00001119.html