代碼簡潔之道--筆記

今天公司給我們培訓的代碼的簡潔之道,講怎樣編寫出簡潔的代碼以及需要注意的地方,下面是我做的一些筆記。

什麼樣的代碼是簡潔的代碼

讓人最快讀懂能理解的代碼就是簡潔的代碼。

代碼的壞味道

1.重複的代碼
2.過長的方法
3.過大的類
4.過長的參數列
5.散彈式修改
6.不同的類別使用switch
7.臨時變量
8.過多的抽象和代理
9.無用多餘的方法代碼

這些壞味道的代碼往往會造成代碼很多問題,如:
1.難於變化
2.難於重用
3.設計過於複雜,不利於當前編碼
4.同樣的邏輯多處出現,沒有進行抽象的統一
5.命名混亂,結構雜亂,難以閱讀和理解
6.難於測試和驗證

公司制定的十三大原則

4不超

  1. 函數圈複雜度不超過15
  2. 函數代碼行數不超過50行
  3. 函數參數不超過7個
  4. 函數嵌套層次不超過3層

2個一

  1. 每一行代碼只表達一件事
  2. 每個變量只用於單一用途

7禁止

  1. 函數/變量命名要有真實準確的意義 (禁止含有Not、And、OR;禁止具有歧義的命名)
  2. 禁止使用do/while語句
  3. 禁止使用continue語句
  4. 禁止使用魔法數字
  5. 禁止使用三元表達式
  6. 禁止在if語句中使用運算表達式
  7. 禁止提交SVN的代碼中含有死代碼

編寫函數注意的地方。

1.使用衛函數:衛函數是指減少程序的複雜度提前返回輸出。

2.函數、變量的命名需要表達真實意圖,不能詞不達意。達到讓人讀方法名就能知道這個函數是做什麼用的效果。

3.如果是一個public函數,儘量保持函數的單一抽象層次原則。即將這個函數抽離分解成若干個子函數組成,每個函數只做一件事情。這樣的目的可以使得代碼變得簡潔易懂。

如下面的代碼。
在這裏插入圖片描述
If(!readOnly){…}可以使用衛函數,改成if(readOnly){return };然後對函數進行抽象,可以抽成三部分,第一部分判斷是否爲只讀,第二部門擴容,第三部門添加函數。如下:
在這裏插入圖片描述
這樣代碼就顯得很簡潔了,讓人一眼就能明白是做什麼的。最後一個函數addElement()中只有一條語句也單獨的抽成一個函數,這樣做的好處是保證的函數的單一抽象層次原則。像書的目錄一樣,整個add()方法中都是函數組成,顯得更加的美觀,並且抽成函數可以通過函數名就能知道這個函數是做什麼的,比直接寫語句更加的直觀。

之前的理解是代碼儘量多寫註釋,但是聽完課之後理解到不要寫無用的註釋。當你想通過註釋來說明一段代碼是做什麼的時候也許你就應該將其抽離出成函數,通過函數名來解釋這個函數的作用,這樣使得代碼更加簡潔。另外一段代碼很亂,就不要給它再增加註釋了,重寫這個方法吧。

函數的四個一原則

一個變量只做一個用途
一行代碼只做一件事
一個循環只做一件事
一個函數只做一件事

代碼的圈複雜度計算

1.進入函數,開始執行代碼 +1
2.遇關鍵字(if /else if /for /while /&& /|| ) +1
3.Switch的每個case/default +1
4.三元運算 a? b:c +1
5.Catch +1
6.Default +1

重構

重構就是在不改變軟件系統外部行爲的前提下,改善它的內部結構。

1、不改變外部行爲
2、只改善內部結構——使其程序的設計模式和架構更趨合理,提高軟件的擴展性和維護性

重構的目的:

1.找出程序中的錯誤
2.幫助我們提高變成速度
3.幫助我們提高設計和編碼水平

重構的時機

1.增加新功能時一併重構,增加功能前需要理解修改的代碼,如果發現代碼不易於理解無法輕鬆的增加功能,此時就需要對代碼進行重構
2.修補錯誤時一併重構,通過重構改善代碼結構,幫助我們找到bug
3.Review 代碼時一併重構

注意當代碼實在是太混亂時請不要重構了,直接重寫代碼吧,還有當項目即將結束時不建議重構代碼,因爲已經沒有時間來重構了

重構的對象:即哪些代碼需要重構。

1.重複的代碼,重複的代碼需要提取出來形成函數以便於多處調用。
2.冗長的代碼塊,需要進行分析抽離成若干個簡潔的函數實現。
3.循環過長和嵌套過深的代碼,循環內部的複雜 代碼往往可以轉成子程序。
4.子程序命名不當,需要對子程序重新命名,拆分或合併。
5.難以理解的代碼,需要進行整理流程並進行模塊化。

課件:https://pan.baidu.com/s/1ICbLWJjzgiar6rr4wRV0kw
提取碼:hpf3
歡迎交流獲取更多資源。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章