將程式碼寫的簡潔並且易讀易懂是每一位優秀的coder所應該具備的基本功。
前幾天在github上看到clean-code-php這個專案,感覺很有收穫,於是在這裡記錄一下。
使用有意義並且可讀的變數名稱
Bad:
$ymdstr = $moment->format(`y-m-d`);複製程式碼
Good:
$currentDate = $moment->format(`y-m-d`);複製程式碼
對同一只型別的變數使用同樣的詞彙
Bad:
getUserInfo();
getUserData();
getUserRecord();
getUserProfile();複製程式碼
Good:
getUser();複製程式碼
使用易於查詢的命名
Bad:
// 這裡的4是什麼鬼??
if ($user->access & 4) {
// ...
}複製程式碼
Good:
class User
{
const ACCESS_READ = 1;
const ACCESS_CREATE = 2;
const ACCESS_UPDATE = 4;
const ACCESS_DELETE = 8;
}
if ($user->access & User::ACCESS_UPDATE) {
// do edit ...
}複製程式碼
不要讓讀者猜
Bad:
$l = [`Austin`, `New York`, `San Francisco`];
for ($i = 0; $i < count($l); $i++) {
$li = $l[$i];
doStuff();
doSomeOtherStuff();
// ...
// ...
// ...
// $li 變數代表什麼???
dispatch($li);
}複製程式碼
Good:
$locations = [`Austin`, `New York`, `San Francisco`];
foreach ($locations as $location) {
doStuff();
doSomeOtherStuff();
// ...
// ...
// ...
dispatch($location);
}複製程式碼
避免過深的巢狀
Bad:
function isShopOpen($day)
{
if ($day) {
if (is_string($day)) {
$day = strtolower($day);
if ($day === `friday`) {
return true;
} elseif ($day === `saturday`) {
return true;
} elseif ($day === `sunday`) {
return true;
} else {
return false;
}
} else {
return false;
}
} else {
return false;
}
}複製程式碼
Good:
function isShopOpen($day)
{
if (empty($day) && ! is_string($day)) {
return false;
}
$openingDays = [
`friday`, `saturday`, `sunday`
];
return in_array(strtolower($day), $openingDays);
}複製程式碼
Bad:
function fibonacci($n)
{
if ($n < 50) {
if ($n !== 0) {
if ($n !== 1) {
return fibonacci($n - 1) + fibonacci($n - 2);
} else {
return 1;
}
} else {
return 0;
}
} else {
return `Not supported`;
}
}複製程式碼
Good:
function fibonacci($n)
{
if ($n === 0) {
return 0;
}
if ($n === 1) {
return 1;
}
if ($n > 50) {
return `Not supported`;
}
return fibonacci($n - 1) + fibonacci($n - 2);
}複製程式碼
不要新增不必要的上下文
如果你的類/物件已經說明了一些資訊,不要在你的變數名和屬性裡重複
Bad:
class Car
{
public $carMake;
public $carModel;
public $carColor;
//...
}複製程式碼
Good:
class Car
{
public $make;
public $model;
public $color;
//...
}複製程式碼
引數初始化時設定預設值
function create($name = null)
{
$newName = $name ?: `ABC`;
// ...
}複製程式碼
設定預設值一個比較明顯的好處是,當對一個較早之前已經定義好的函式新增引數時,將新增的引數設定預設值可以省得去修改以前使用該函式的地方。