好的開發者通常以程式碼品質來定義。在軟體產業,寫好的程式碼意味著在測試,更新,擴充或修復漏洞中省錢。本文,我將向你展示一些現實生活中技巧和想法的例子,來幫助你清理你的邏輯程式碼,重構它,讓它變得更健全和模組化。這些技巧將不僅幫助你重構你的舊程式碼,而且給你一些如何從現在開始寫出簡潔程式碼的好建議。
什麼是重構,為什麼我們需要它?
重構是指幫組我們寫簡潔程式碼的方法和步驟。這對其他可能閱讀,擴展和不需要怎麼編輯來復用我們程式碼的其他開發者來說是很重要的。
下面的內容將向你展示一些重構邏輯程式碼,讓它變得更好的範例。
不要在沒有單元測試的情況下重構生產環境的程式碼
我的第一個建議是從不在沒有完全進行單元測試的情況下開始重構邏輯程式碼。我的理由是:你將會以很難有修復的損壞的功能收尾,因為你也很難指出是哪裡損壞了。因此,如果你要重構它,從測試開始。保證你準備重構的部分被測試覆蓋。 PHPUnit 程式碼覆蓋分析.
從你程式碼最底層開始重構
看一下下面的圖片。這是一個我從 Github 找到的真實的酒店管理系統專案。這是一個開源的項目,可想閉源項目將是糟糕的。
範例:從底層開始重構
你看這個程式碼,這裡用紅色標示了三個層級。最底層應該是第一個 if 條件下被 if/else 包圍的申明。通常,最底層是集中在單一邏輯處理,比較容易重構。
讓你的方法更短,分解它們到更小的方法或設定檔/ DB 表
也許在這裡,我們可以向下面一樣提煉它到一個私有方法:
使你的方法更短
下一個深入點將是上傳參數和載入視圖。現在,再來看看在重構其他部分之後的 add() 方法。它變得更加簡潔,易讀,易於測試。
範例:首先重構最底層
if 申明堅持使用大括號
大多數程式語言都支援單行if 申明,因為這樣比較簡單,所以有些開發就這麼使用,但是這樣不便於閱讀,而且容易造成問題,因為一個空行就可以中斷條件造成崩潰。看下面兩個範例的不同:
範例:使用大括號
別使用魔術數字或魔術字串:
下個範例中,你注意到如果房間超過250 ,會回傳一個錯誤訊息。這裡,250 被認為是一個魔術數字。如果你不是寫這篇的開發者,很難指出這個數字表示什麼。
範例:魔術數字
為了重構這個方法,我們可以指出 250 表示最大的房間數。為了替換硬編碼,我們可以提取它到一個變數 $maxAvailableRooms 。現在對其他開發者來說,它變得更容易被理解。
範例:修正魔術數字
不要使用else 申明,如果你不是真的需要:
在相同的availablerooms () 函數中,你注意到那個if 申明, 其中我們可以輕易擺脫else 部分,而且邏輯保持一致。
範例:忽略else 申明
#使用能夠表示你的方法,變數和測試的命名
在後面的範例中,你會發現飯店管理系統有兩個方法分別是「index () 」 和「 room_m () 」。對我來說,我搞不清楚它們的目的是什麼。我認為它應該很容易被理解,如果它們的命名都能夠描述自己。
範例:不好的方法命名
#充分利用你的程式語言的功能
許多開發者不會利用到他們所使用的程式語言的全部功能。很多功能能夠節省你們的時間,而且能夠讓你們的程式碼更健壯。看下面的範例,注意如何在更少程式碼情況下更容易達到相同的結果的,透過使用類型提示。
最後,我想提供一些關於更好編碼的快速提示:
# ● 使用新的陣列形式[] 取代舊的array ()。
● 除非不檢查資料型別很重要,否則使用 === 運算子取代 ==。
● 給公共方法一個簡短的描述性名稱總是一個好主意。私有方法可以使用較長的名稱,因為它們的適用範圍比較有限。
● 只對實作介面的方法使用通用名稱例如 add (),並對單一類別方法使用描述性名稱例如 addUser () 或 addDocument ()。
● 從類別中刪除未使用的方法。
● 對傳回值為 boolean 等的函數使用 is/has 前綴:isAdmin ($user),hasPermission ($user)。
● 總是在類別方法和屬性中使用存取修飾符。
● 注意介面污染:僅使用使用者可以公開使用的方法。
● 在公共方法位於頂端的位置組織類別方法。
● 總是在類別中應用單一職責的概念。
以上是高級PHP工程師必備的程式設計技巧及思維的詳細內容。更多資訊請關注PHP中文網其他相關文章!