条件記述の統合 (リファクタリング-p240)
リファクタリング
Published: 2019-02-11

目的

「リファクタリング」を理解するためにサンプルコードを PHP で書き換えてみました。

今回は「条件記述の統合」について書きます。

「条件記述の統合」 について

条件記述のコードを統合することが重要である理由は2つあります。

1つは、他の条件判定とorで繋げることで実際は単一の条件判定を行うことを示して、 その条件判定を明確にするためです。

もう1つの理由は、このリファクタリングはしばしば「メソッドの抽出」の下準備としての役割を持つためです。

変更前

<?php

class Dummy
{
    private $_seniority;
    private $_monthsDisabled;
    private $_isPartTime;

    public function __construct($seniority, $monthsDisabled, $isPartTime)
    {
        $this->_seniority = $seniority;
        $this->_monthsDisabled = $monthsDisabled;
        $this->_isPartTime = $isPartTime;
    }

    public function disabilityAmount()
    {
        if ($this->_seniority < 2) return 0;
        if ($this->_monthsDisabled > 12) return 0;
        if ($this->_isPartTime) return 0;

        // 後続の処理
        return 1;
    }
}

$d1 = new Dummy(2, 11, 0);
echo (int)$d1->disabilityAmount() . "\n";

変更後

<?php

class Dummy2
{
    private $_seniority;
    private $_monthsDisabled;
    private $_isPartTime;

    public function __construct($seniority, $monthsDisabled, $isPartTime)
    {
        $this->_seniority = $seniority;
        $this->_monthsDisabled = $monthsDisabled;
        $this->_isPartTime = $isPartTime;
    }

    public function disabilityAmount()
    {
        if ($this->isNotEligibleForDisability()) {
            return 0;
        }

        // 後続の処理
        return 1;
    }

    private function isNotEligibleForDisability()
    {
        return (($this->_seniority < 2) ||
            ($this->_monthsDisabled > 12) ||
            ($this->_isPartTime));
    }
}

$d2 = new Dummy2(2, 11, 0);
echo (int)$d2->disabilityAmount() . "\n";