4
2

More than 3 years have passed since last update.

PHPStormなら、「あ〜これ別のメソッドに切り出したいな〜」ってときに一瞬でした

Posted at

Jun-22-2020 17-48-06.gif

以下のようなコード、
パンケーキを3つ焼くメソッドがありますが、ループの中でパンケーキを焼く処理を細かく記述されています。
もちろんこれでもそれほど悪いコードではないと思いますが、
パンケーキを焼くための詳細なロジックを他のメソッドに切り出せたら、メソッド全体の見通しが少しスッキリしそうです。

class Test
{
    public function makeThreePancake(): void
    {
        $kitchen = new Kitchen();
        $kitchen->initialize();

        foreach (range(0, 3) as $i) {
            // 見通しが悪い処理
            $pancakeMaker = new PancakeMaker($kitchen, $i);
            $pancakeMaker->mix();
            $pancakeMaker->bake();
            $pancakeMaker->turnOver();
            $pancakeMaker->bake();
            $pancakeMaker->getPancake();
            print 'パンケーキが焼けたよ';
        }

        $kitchen->finalize();
    }
}

メソッドに切り出したい箇所を選択してRefactor > Extract > Method... をクリックします
メソッド名、アクセス修飾子を選択するとメソッドに切り出してくれます。

結果は以下のようになります。

class Test
{
    public function makeThreePancake(): void
    {
        $kitchen = new Kitchen();
        $kitchen->initialize();

        foreach (range(0, 3) as $i) {
            $this->makePancake($kitchen, $i);
            print 'パンケーキが焼けたよ';
        }

        $kitchen->finalize();
    }

    /**
     * @param Kitchen $kitchen
     * @param $i
     */
    private function makePancake(Kitchen $kitchen, $i): void
    {
        // 見通しが悪い処理
        $pancakeMaker = new PancakeMaker($kitchen, $i);
        $pancakeMaker->mix();
        $pancakeMaker->bake();
        $pancakeMaker->turnOver();
        $pancakeMaker->bake();
        $pancakeMaker->getPancake();
    }
}

これでmakeThreePancake()がスッキリしました。
コードの中で使ってるローカル変数をメソッドの引数にしてくれるのが賢いですね。

以上、参考になりましたら幸いです。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2