目的
「リファクタリング」を理解するためにサンプルコードを 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";