問い合わせによる一時変数の置き換え

前回のリファクタリング「説明用変数の導入」で冗長になったコードに、「問い合わせによる一時変数の置き換え」を試してみましょう。
 
「問い合わせによる一時変数の置き換え」は意味のある式を一時変数に代入して利用しているため、メソッド内でしかその値を活用できない場合に用いられ、「意味のある式」を問い合わせメソッドとして抽出するリファクタリングです。
 
とくにフィールドから意味のある値を導出している場合に効果を発揮します。
 
説明用変数の導入後のコード
 
    // ビットマップを中央に描画
    private void DrawCenter(Bitmap bitmap)
    {
        // ピクチャーボックス設定用ビットマップを生成
        Bitmap canvas = new Bitmap(PictureBox1.Width, PictureBox1.Height);

        // キャンバスのGraphicsオブジェクトを生成
        Graphics g = Graphics.FromImage(canvas);

        // 中央描画用x座標を取得
        int centerDrawXPosition = (canvas.Width / 2) - (bitmap.Width / 2);

        // 中央表示用y座標を取得
        int centerDrawYPosition = (canvas.Height / 2) - (bitmap.Height / 2);

        // キャンバスの中央にビットマップを描画
        g.DrawImage(bitmap, centerDrawXPosition, centerDrawYPosition);

        // Graphicsオブジェクトのリソースを解放
        g.Dispose();

        // ピクチャーボックスに描画
        PictureBox1.Image = canvas;
    }
 
コードを眺めると、やはり中央描画用x座標およびy座標を計算している個所が目につきます。
 
キャンバスの幅と高さを利用しておりますが、これらはもともとピクチャーボックスの幅と高さからビットマップを生成していますので、問い合わせメソッドとして抽出してみる価値がありそうです。
 
説明用変数の導入後のコード
 
    // ビットマップを中央に描画
    private void DrawCenter(Bitmap bitmap)
    {
        // ピクチャーボックス設定用ビットマップを生成
        Bitmap canvas = new Bitmap(PictureBox1.Width, PictureBox1.Height);

        // キャンバスのGraphicsオブジェクトを生成
        Graphics g = Graphics.FromImage(canvas);

        // キャンバスの中央にビットマップを描画
        g.DrawImage(bitmap,
            GetCenterDrawXPosition(bitmap), GetCenterDrawYPosition(bitmap));

        // Graphicsオブジェクトのリソースを解放
        g.Dispose();

        // ピクチャーボックスに描画
        PictureBox1.Image = canvas;
    }

    // 中央描画用x座標を取得
    private int GetCenterDrawXPosition(Bitmap bitmap)
    {
        return (PictureBox1.Width / 2) - (bitmap.Width / 2);
    }

    // 中央描画用y座標を取得
    private int GetCenterDrawYPosition(Bitmap bitmap)
    {
        return (PictureBox1.Height / 2) - (bitmap.Height / 2);
    }
 
メソッドの数が増えてしまいましたが、DrawCenterメソッドは簡潔に表現できるようになりましたし、中央描画用x座標およびy座標を取得するメソッドは再利用が可能になりました。
 
一時変数のインライン化」に始まり、「説明用変数の導入」、今回の「問い合わせによる一時変数の置き換え」は、よく使われるリファクタリングなので必ず覚えておきましょう。

g h T
 3,607 Total Views

ADVERTISING

駅チカ!ホテル検索
全国の駅や目的地近くの宿泊施設を検索し予約することができます。最寄駅沿線からもホテルを検索できるので、アクセスのよいホテルを予約することが可能です。
  1. コメントはまだありません。

  1. トラックバックはまだありません。