乾淨的程式碼: 編寫可讀的函式
以下是 clean Code 關於編寫可讀函式的建議的摘要。
這個建議是針對用 OOP 語言編寫的函式,儘管許多概念會延續到其他程式設計正規化。
原則 1 - 小!
- 你的大部分功能應該少於15行,而且幾乎不應該超過20行。
- 你應該總是能夠把整個函式放在你的顯示器上。如果你不能,那麼你可能需要將該函式分解成不同的函式。
- 如果你遵循這個原則,就意味著你的函式不會大到可以容納幾個巢狀結構。你將無法裝下一個迴圈,然後在這個迴圈裡面裝下一個巢狀的if/else語句,等等。
- 相反,你應該讓這些巢狀結構成為獨立的函式呼叫。這也增加了文件的價值,因為這些函式會有很好的描述性的名字來解釋它們做什麼。
原則 2 - 做一件事
- 另一種陳述原則1的方式是,你的函式應該只做一件事。
- 一個好的啟發式方法是看你是否能從你的函式中提取一些程式碼,並將這些程式碼變成一個新的函式,其名稱不僅僅是對其實現的重述。
- 如果你能做到這一點,那就表明你的函式在做多件事情,你應該進一步將其分解。
原則 3 - 每個函式的一個抽象級別
- 你的程式經常可以被劃分為不同的抽象層,每一層都代表相同資訊和過程的不同模型,但方式不同。
一個例子是,如果你正在開發一個程式來刮取一個網站,解析一些資料,然後把這些資料放到一個資料庫中。
一個抽象層是你向網站的伺服器傳送HTTP請求後得到的HTML字串。
- 你把這個HTML字串傳送到你的第二層抽象,在那裡,一個HTML解析器把這個字串轉換成一個物件,其中HTML頁面被表示為一個巢狀的資料結構(如果你想要一個更具體的例子,請閱讀BeautifulSoup)。這是第二層的抽象。
- 第三層抽象可以是你從HTML頁面物件中提取你需要的特定資料,並將這些資料儲存在一個陣列中。
- 第四層抽象是將陣列中的資料寫入資料庫。
一個函式中的語句應該都在同一個抽象層次上。
你不應該在同一個函式中操作HTML字串物件和寫入資料庫。
相反,"清潔程式碼 "建議採用 "下降法則"(The Stepdown Rule),即你的程式碼可以作為一個自上而下的敘事來閱讀。
每個函式後面都應該有一個下一層抽象的函式。這樣一來,當你閱讀程式時,你就會在通過函式列表時,每次都會下降一層抽象概念。
原則 4 - 使用描述性名稱
如果你遵循前三個原則,那麼想出一個名字應該不會太難。
你的功能越小、越集中,就越容易想出一個名字。
不要害怕讓你的名字變長。一個長的、描述性的名字比一個短的、模糊的名字要好得多。你的編輯器的自動完成功能應該使你很容易寫出帶有長函式名稱的程式碼。
另外,使用一種命名慣例,允許在函式名中輕鬆讀出多個單詞。CamelCase就是一個例子。
原則 5 - 使用更少的函式引數
一個函式的理想引數數是零。應該避免一個函式有三個以上的引數。
有很多函式引數會使你更難閱讀和理解函式,因為它迫使你知道額外的細節(而這些細節通常來自不同的抽象層)。
此外,有很多函式引數會使你更難編寫測試。你必須寫出所有的測試用例,以確保所有不同的引數組合都能正常工作!你必須寫出所有的引數。
原則 6 - 避免副作用
副作用是您的函式在其本地環境之外修改某些狀態變數的地方,除了返回一個值(預期效果)。
一個示例可能是從資料庫中讀取某個值然後返回該值的函式。
如果同一個函式也以某種方式修改狀態(並且該修改在函式終止後持續),那麼該修改是一個副作用。
Clean Code 建議您避免副作用。
你的函式要麼改變物件的狀態,要麼返回一些資訊。一個函式不應該兩者兼得!
原則 7 - 使用異常,而不是錯誤程式碼
您的函式應該很少返回錯誤程式碼。相反,如果出現問題,您應該丟擲異常,並提供編寫良好的錯誤訊息。
錯誤程式碼的一個問題是它會導致深度巢狀的結構。當您返回錯誤程式碼時,呼叫者必須立即處理該錯誤程式碼。
另一方面,呼叫者可以將異常處理程式邏輯與其他程式碼分開(try、catch 語句具有單獨的 try 邏輯和 catch 邏輯)。
相關文章
- 程式碼簡潔之道:編寫乾淨的 React Components & JSXReactJS
- 6個小技巧教你編寫乾淨整潔的程式碼
- 編寫可閱讀的程式碼--基本規約
- 『No22: 編寫可讀程式碼的藝術(1)』
- 讀書筆記-乾淨程式碼筆記
- 【譯】12個編寫乾淨且可擴充套件的JavaScript技巧套件JavaScript
- 使用 React 和 TypeScript something 編寫乾淨程式碼的10個必知模式ReactTypeScript模式
- php乾淨程式碼PHP
- Dave Cheney:編寫簡單,可讀,可維護的Go程式碼的十個工程建議Go
- LeetCode(面試)中寫出乾淨的程式碼(小技巧合集)LeetCode面試
- 如何更好的編寫async函式函式
- 乾淨程式碼的幾個特點 -Xebia
- 編寫可讀性程式碼的藝術--萬字總結,看到即學到
- 如何編寫冪等的Bash指令碼(函式)? · Fatih Arslan指令碼函式
- ES6+好用的小技巧,讓你的程式碼更乾淨,短巧,易讀
- [譯] 編寫函式式的 JavaScript 實用指南函式JavaScript
- 如何寫出優質乾淨的程式碼,這6個技巧你不能錯過!
- 感悟篇:如何寫好函式式程式碼函式
- 編寫小而美函式的藝術函式
- C++ 的函式分檔案編寫C++函式
- 命名&可閱讀的程式碼
- 臨時讀原始碼的函式原始碼函式
- 經驗之談:程式碼該怎樣寫才能乾淨整潔
- 利用函式指標,編寫一段簡潔的程式碼,實現計算器的功能函式指標
- 分享常用的CSS函式,助你寫出更簡潔的程式碼CSS函式
- 編寫一個通用的事件監聽函式事件函式
- 如何編寫高質量的函式 -- 敲山震虎篇函式
- 如何編寫翻頁函式?函式
- 每日10行程式碼52:編寫高質量python程式碼方法4——用輔助函式來取代複雜的表示式行程Python函式
- 使用Python的enumerate()函式編寫更Pythonic的迴圈Python函式
- 如何編寫高效的Android程式碼Android
- 如何編寫簡潔的程式碼?
- 程式碼質量第 3 層 - 可讀的程式碼
- 編寫可移植C/C++程式的要點C++
- 編寫可維護的程式碼是一種溝通技巧 - Max Chernyak
- python編碼規範以及推導式的編寫Python
- JavaScript修飾器-讓程式碼更乾淨JavaScript
- 增強 React 列表渲染:乾淨且可重用的模式React模式