優秀開發者效率高出 10%-20%,源於經驗與習慣。代碼維護佔應用生命週期最大成本,模組化、可讀性強的代碼能大幅降低維護成本,避免修改引入新缺陷。
<?php
function getNBDay($d) {
switch($d) { case 5: case 6: case 7: return 1; default: return ($d + 1); }
}
$day = 5;
$nextDay = getNBDay($day);
echo "Next day is: $nextDay\n";
?>
問題:getNBDay、$d、$nextDay 全無語意,5/6/7 魔術數字,回傳值含義不明。
<?php
define('MONDAY', 1); define('TUESDAY', 2); define('WEDNESDAY', 3);
define('THURSDAY', 4); define('FRIDAY', 5); define('SATURDAY', 6); define('SUNDAY', 7);
/**
* 取得下一個工作日
* @param int $dayOfWeek 1=週一 ... 7=週日
* @return int 下一工作日代碼
*/
function findNextBusinessDay($dayOfWeek) {
$nextBusinessDay = $dayOfWeek;
switch($dayOfWeek) {
case FRIDAY: case SATURDAY: case SUNDAY:
$nextBusinessDay = MONDAY; break;
default: $nextBusinessDay += 1; break;
}
return $nextBusinessDay;
}
$day = FRIDAY;
$nextBusDay = findNextBusinessDay($day);
echo "Next business day is: $nextBusDay\n";
?>
優勢:常數替代魔術數字、函數名描述意圖、參數/回傳值有註釋、迴圈變數 $i 等極少數情況可用短名。
將 if ($user->age > 18 && $user->active && !$user->banned) 重構為 if ($user->isEligible()),條件變更時只需改一處,呼叫端零修改,可讀性大增。