摘要:將代碼寫的簡潔并且易讀易懂是每一位優(yōu)秀的所應該具備的基本功。前幾天在上看到這個項目,感覺很有收獲,于是在這里記錄一下。
將代碼寫的簡潔并且易讀易懂是每一位優(yōu)秀的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; //... }參數(shù)初始化時設置默認值
function create($name = null) { $newName = $name ?: "ABC"; // ... }
設置默認值一個比較明顯的好處是,當對一個較早之前已經定義好的函數(shù)添加參數(shù)時,將新增的參數(shù)設置默認值可以省得去修改以前使用該函數(shù)的地方。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://systransis.cn/yun/25935.html
摘要:超過三個參數(shù)會導致參數(shù)之間的組合過多,你必須對每個單獨的參數(shù)測試大量不同的情況。拆分這些函數(shù),可以讓代碼可重用性更高且更易測試。 函數(shù)參數(shù)不要超過兩個 限制函數(shù)的參數(shù)數(shù)量是非常重要的,因為它使你的函數(shù)更容易測試。超過三個參數(shù)會導致參數(shù)之間的組合過多,你必須對每個單獨的參數(shù)測試大量不同的情況。 沒有參數(shù)是最理想的情況,一個或兩個參數(shù)是可以接受的,三個以上則是應該避免的。這很重要的。如果你...
摘要:統(tǒng)一的編碼規(guī)范編碼規(guī)范往簡單說其實就是三個方面換行空格變量命名放在里面,還有一些附加的地方,比如關鍵字大小寫,語法糖的使用與等的問題。這些都是規(guī)范代碼的重要手段。推廣給你的隊友團隊項目中,隊友的配合對整個代碼的規(guī)范起著決定性的作用。 1. 統(tǒng)一的編碼規(guī)范 編碼規(guī)范往簡單說其實就是三個方面: 換行 空格 變量命名 放在 PHP 里面,還有一些附加的地方,比如關鍵字大小寫,語法糖的使用...
摘要:使用和在中,通過為屬性或方法設置和關鍵字可以實現(xiàn)對屬性或方法的可見性控制。你的繼承表達了一個對等比如人類是動物的關系,不是包含的關系比如用戶具有用戶詳情你能從基類中復用代碼你想通過修改全局類來對所有派生類進行修改。 使用getter和setter 在 PHP 中,通過為屬性或方法設置 public, protected 和 private 關鍵字可以實現(xiàn)對屬性或方法的可見性控制。不過,...
摘要:考慮到函數(shù)表示某種行為,函數(shù)名稱應該是動詞或短語,用以說明其背后的意圖以及參數(shù)的意圖。不好的方式好的方式使用條件簡寫。這可能微不足道,但值得一提。 為了保證可讀性,本文采用的音譯而非直意。 簡介 如果你關注代碼本身和代碼的編寫方式,而不是只關心它是否能工作,那么你寫代碼是有一定的水準。專業(yè)開發(fā)人員將為未來的自己和其他人編寫代碼,而不僅僅只編寫當前能工作就行的代碼。 在此基礎上,簡潔代碼...
摘要:是推薦的便于記憶的首字母簡寫,它代表了命名的最重要的五個面對對象編碼設計原則單一職責原則開閉原則里氏替換原則接口隔離原則依賴反轉原則單一職責原則修改一個類應該只為一個理由。別寫重復代碼這條原則大家應該都是比較熟悉了。 SOLID 是Michael Feathers推薦的便于記憶的首字母簡寫,它代表了Robert Martin命名的最重要的五個面對對象編碼設計原則 S: 單一職責原則 ...
閱讀 3536·2021-09-27 13:35
閱讀 3575·2019-08-29 17:09
閱讀 2465·2019-08-26 11:30
閱讀 714·2019-08-26 10:32
閱讀 549·2019-08-26 10:23
閱讀 1208·2019-08-26 10:20
閱讀 3164·2019-08-23 15:26
閱讀 3575·2019-08-23 14:33