讓代碼更容易讀

1.選擇具體,避免空泛,找到更有表現力的詞fetch和download要比泛泛的get好deliver,dispatch,route,distribute要比send更加明確2.循環結構中使用i,j,k;若是更加精確的可使用userI或user_i(駝峯或下劃線命名任選其一)3.爲變量名附加更多的信息,使其更容易讀.hexId // 十六進制idstartMs // 開始時間,單位毫秒elapsedSecs // 消耗的時間,單位秒4.附加額外信息plaintextPassword //純文本格式密碼,須要加密後使用unescapteComment //須要轉義後才能使用htmlUtf8 //已轉化爲utf8格式dataUrlenc //url編碼的輸入數據5.在小的做用域裏可使用簡短的名字如: TaelService $m;6.丟掉沒用的詞:convertToString() 能夠替換爲 toString()7.利用名字格式來傳遞含義類名大駝峯格式: ClassName變量小駝峯: fooName常量: CONST_NAME8.避免歧義如從數據庫獲取數據:db->filter('year<=2017'); 這兒的filter咱們不清楚是挑出符合規則的數據,仍是減掉符合規則的數據.下面的相對來說語義更加明確db->where('year<=2017')->get();9.min/max(包含)表示極限10.first/last表示包含範圍11.begin/end表示包含/排除的範圍12.給bool值命名readPassword 是須要讀取密碼,仍是已經讀取了密碼,不如needPassword只管或者userIsAuthenticated只管給bool值加上is,has,can或should這樣的詞,可使語義更加明確13.避免使用反義詞$disableSsl = false;應該用$useSsl = true;14.與使用者的指望相匹配如使用者老是指望get和size方法不須要作過多的計算.就名字而言大部分人的理解是count比size須要更多的操做.15.臨時變量應該是對原有變量的處理後使用,不然就不要使用臨時變量.15.源代碼佈局一致原則:A.使用一致的佈局B.類似的代碼應該看起來一致C.相關的代碼行分組,造成代碼塊16.添加額外的方法來整理不規則的東西17.須要時使用列對齊$rule = [            'name'      => 'required|between:2,50',            'content'   => 'required|between:10,500',            'limitnum'  => 'required|integer|between:10,1000',            'level'     => 'required|integer|between:1,500',            'img'       => 'required|mimes:jpeg,bmp,png,gif|image|max:1024k'        ];18.選擇一個有意義的順序,並始終使用它.好比html中的表單應以重要到不重要的次序來排列,其次以字母順序來排序.php接收表單值也應該如此$name = Input::get('name');$age = Input::get('age');19.if左邊的值應該是變量,右邊的值應該是常量20.除非邏輯簡單(好比只對條件檢查就返回值), 不然就不要用三目運算符21.在函數中提早返回,在循環中提早使用break或continue;經過提前返回來減小嵌套22.多個if時,應該先處理正確的/簡單的/有趣或可疑的狀況$age = intval($rawAge);if ($age <= 0) {	return '年齡錯誤';}if ($age > 100) {	return '年齡錯誤';}if ($age > 0 && $age < 20) {	return '青年';}先處理正確的if ($flag === true) {	.....}23.拆分超長的表達式,如:if (trim(explode($rawStr, ',')[0]) === 'test') {	...}能夠拆分爲:$users = trim(explode($rawStr, ',')[0]);24.總結變量if ($request->uid === $user->id) {	...}就能夠寫成:$userOwnsDocument = ($request->uid === $user->id);25.德摩根定理(分別取反,轉換與/或):if (! $a && ! $b && ! $c) {}要比下面的代碼更具可讀性if (! ($a || $b || $c)) {}26.不要濫用短路邏輯,但如下邏輯是合理的if($object && $object->userName) {	....}27.更改複雜的邏輯,變的簡單優雅:return ($begin >= $other->begin && $begin < $other->end) || ($end >= $other->begin && $end <= $other->end);能夠拆分爲:if ($other->end <= $begin) {	return false;}if ($other->begin >= $end) {	return false;}return true;28.拆分巨大的語句:29.減小變量,對於只出現一次的變量,沒必要聲明.減小控制流的變量.30.縮小變量做用域;如class Object{    private $str;        public function method1()    {        $this->str = '...';        $this->method2();    }    public function method2()    {        $this->str = '...';    }}str只有method1和method2中用到,因此應該將其縮小做用域.class Object{    public function method1()    {        $str = '...';        $this->method2($str);    }    public function method2($str)    {        ....    }}31.能用靜態方法就用靜態方法.32.多使用常量;只寫一次的變量更好.提早返回避免中間變量.33.積極的發現並抽取不相關的子邏輯.34.代碼一次只作一件事情35.代碼庫越少越好
相關文章
相關標籤/搜索