保持代碼簡潔和高可讀性遠遠要比咱們想象的要難,有時候甚至比持續架構設計都要難。這裏收集了一些可能對你重構代碼有用的 代碼片斷 供你們參考。laravel
咱們經常須要在一個函數裏面接受一個支持字符串或者數組類型數據的參數。能夠使用適當的類型轉化方式將字符串類型轉化成數組類型,來取代類型檢測。數組
// 沒有類型轉化 $param = is_array($param) ? $param : [$param]; array_map(function ($item) { // }, $param); // 使用類型轉化 array_map(function ($item) { // }, (array) $param);
固然這看起來沒什麼區別,只是節省了一行代碼而已。可是你能夠設想一下,當你使用複雜的循環結構或者嵌套數組處理大量數據時。這樣作將會有意義,它能使代碼保持簡潔。架構
類型檢測也是一種讓代碼簡潔的小技巧。一個小的類型檢測能夠爲你節省幾行代碼,同時能夠使參數具備一些靈活性。函數
public function scopeOfTeam($query, $team) { $team = $team instanceof Team ? $team->id : $team; return $query->where('team_id', $team); }
在這個例子中,咱們能夠使用一個表達式在一行中進行類型檢測,因此咱們不須要處處使用 if-else 語句。同時這樣函數就能夠接收 Team 類型或 int 型兩種類型的數據了。spa
有時候,在執行動做以前咱們須要作一些條件檢查。可是,隨着咱們的應用的持續增加,if 語句會變得愈來愈長。因此,咱們須要考慮重構。一個小例子:架構設計
// 與其這樣 if ($a === 'val_1' || $a === 'val_2' || $a === 'val_3') { // 執行動做 } // 不如這樣 if (in_array($a, ['val_1', 'val_2', 'val_3'])) { // 執行方法 }
注意,第一個例子運行方式與第二個有一些不一樣。第一個例子中,只要有一個條件爲真,則後面的條件就會被忽略,在一些狀況下,它會更快。謝謝 Zois Pag 的建議。設計
這兩個例子的結果是同樣的,可是第二個更整潔。咱們能夠再也不使用 || 操做符,而且只引用了 $a 變量一次。code
一個廣泛的錯誤,咱們會常常性的過分使用 if-else 語句。固然,有些時候它是不可省略的,但也有些狀況,咱們不須要用到它。ip
// 以前這樣用 if ($a === 'b') { return true; } else { return false; } // 如今能夠這樣 return $a === 'b';
可是邏輯顛倒了怎麼辦? 那麼, 若是條件是 true 咱們又想返回 false 該怎麼辦? 固然,在 if 語句中,咱們僅須要相反的 true 和 false ,可是在重構的版本中,咱們會有一個相對輕鬆的工做。只須要在你驗真假的時候加上 ! 運算符。它將返回顛倒後的結果。開發
天天咱們都能發現一些充滿了過分複雜邏輯的方案和代碼,長期來看,這對開發者和產品自己都很差。上文中,咱們只是嘗試蒐集了一些例子,在這些例子裏,你只需作出一點小的努力,就可讓你的代碼變得更好更簡潔。
討論請前往社區: https://laravel-china.org/top...