Advertisement
Guest User

Untitled

a guest
Jun 30th, 2015
216
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.88 KB | None | 0 0
  1. # 註解
  2.  
  3. ## 不適當的資訊
  4.  
  5. 當註解含有的資訊更適合儲存於原始碼管控系統、錯誤追蹤系統或任何儲存記錄的系統。
  6. 例如,程式檔的歷史修改,作者、最後修改日期、效能報告序號之類的詮釋資訊,不應該出現在註解。
  7.  
  8. ## 廢棄的註解
  9.  
  10. 當註解過時、不相關或不正確時,就是一種廢棄的註解。
  11. 如果你發現廢棄的註解,最好是儘快更新或移除它。否則容易和它原先描述的程式越離越遠。
  12.  
  13. ## 多餘的註解
  14.  
  15. 如果註解描述了原本程式已經能夠表達的意圖,那麼這段註解就是多餘的。例如:
  16.  
  17. ```java
  18. i++; // increment i
  19. ```
  20.  
  21. 另一個「多餘的註解」的例子是有關 Javadoc:
  22.  
  23. ```java
  24. /**
  25. * @param sellRequest
  26. * @return
  27. * @throws ManagedComponentException
  28. */
  29. public SellRequest beginSellItem(SellRequest sellRequest) throws ManagedComponentException
  30. ```
  31.  
  32. 註解應該要說明的是,程式本身無法表達的意圖。
  33.  
  34. ## 寫得不好的程式碼
  35.  
  36. 花一點時間去確保這是你所能寫出的最好註解。
  37. 仔細選用你的詞彙,使用正確的文法和標點符號,不要說廢話,不要說某些顯而易見的事,要簡潔有力。
  38.  
  39. ## 被註解掉的程式碼
  40.  
  41. 誰知道這段程式碼多舊了?誰知道這樣的舉動有沒有意義?
  42. 當你看到備註解掉的程式,刪掉它!不要擔心,因為程式碼管控系統會幫你記住這段程式碼。
  43.  
  44. # 開發環境
  45.  
  46. ## 需要多個步驟以建立專案或系統
  47.  
  48. 建立一個專案應該是單一步驟的簡單行為,你不應該還需要從原始碼管控系統一點一點地找出程式片段,你也不應該需要一連串神祕的指令或隨上下文變動的腳本,才能幫你建立個別的元素。
  49.  
  50. ## 需要多個步驟以進行測試
  51.  
  52. 你應該要能用一個指令就可以快速、簡單和直接地執行**所有的**單元測試。
  53.  
  54. # 函式
  55.  
  56. ## 過多的參數
  57.  
  58. 函式的參數不能太多。沒有參數是最棒的,超過三以上的參數,其必要性是非常值得懷疑的,應該要盡可能避免。
  59.  
  60. ## 輸出型參數
  61.  
  62. 輸出型參數是不直覺的。讀者通常預期參數是用來輸入的,而不是用來輸出結果的。
  63. 如果你的函式一定得修改某個東西的狀態,就讓該函式只能修改其所屬物件的狀態。
  64.  
  65. ```java
  66. appendFooter(s);
  67.  
  68. public void appendFooter(StringBuffer report)
  69. ```
  70.  
  71. 這個函式真的是 s 接在某個東西的後方嗎?還是這個函式會把某些頁尾加到 s 的後面?
  72.  
  73. 它如果改成下列方式來呼叫 appendFooter 會比較好。
  74.  
  75. ```java
  76. report.appendFooter();
  77. ```
  78.  
  79. ## 旗標參數
  80.  
  81. Boolean 參數大聲地說出「該函式做了超過一件的任務」,應該被移除。
  82.  
  83. ## 被遺棄的函式
  84.  
  85. 不要害怕刪掉那些不再被呼叫的函式。記住,你的原始碼管控系統還會記住這些函式。
  86.  
  87. # 一般狀況
  88.  
  89. ## 同份原始檔存在多種語言
  90.  
  91. 在現今的程式開發環境中,屎有可能將許多不同的語言放置在同一份原始檔裡。例如,一個 Java 原始檔可能包含了 XML、HTML、YAML、JavaDoc 之類的片段。
  92. 對於原始碼來說,最理想的狀態是只擁有一種,而且是唯一的一種語言。
  93.  
  94. ## 明顯該有的行為未被實現
  95.  
  96. 遵循「最少驚奇原則」,任何函式或類別應該實現其他程式設計師合理預期該有的行為,例如,考慮一個函式可將某日子的名稱,翻譯成一個代表該日子的列舉值。
  97.  
  98. ```java
  99. Day day = DayDate.StringToDay(String dayName);
  100. ```
  101.  
  102. 我們期待字串 Monday 會被翻譯成 `Day.MONDAY`。我們也會期待一些常用的星期縮寫也能夠被翻譯。
  103. 當一個明顯該有的行為沒有被實現,程式碼的讀者和程式碼的使用者,會無法依靠對函式名稱的直覺來瞭解函式的本意,他們對於原作者喪失了信任感,所以必須回頭閱讀程式碼的細節。
  104.  
  105. ## 在邊界上的不正確行為
  106.  
  107. 不要依賴你的直覺,察看所有的邊界條件,然後替這些邊界條件撰寫測試程式。
  108.  
  109. ## 無視安全規範
  110.  
  111. 關閉某些編譯器的警告,也許能幫助你順利建立專案,但也付出了可能得進行無止盡除錯的風險。
  112. 關閉失敗的測試,然後告訴自己,晚些時候你會使之全數通過,就像假裝刷信用卡不用付錢般的一樣糟糕。
  113.  
  114. ## 重複的程式碼
  115.  
  116. 在程式裡盡可能地,找到重複的地方,並移除這些重複。
  117.  
  118. ## 在錯誤抽象層次上的程式碼
  119.  
  120. ## 基底類別相依於其衍生類別
  121.  
  122. ## 過多的資訊
  123.  
  124. ## 被遺棄的程式碼
  125.  
  126. ## 垂直分隔
  127.  
  128. ## 不一致性
  129.  
  130. ## 雜亂的程式
  131.  
  132. ## 人為的耦合
  133.  
  134. ## 特色留戀
  135.  
  136. ## 選擇型參數
  137.  
  138. ## 模糊的意圖
  139.  
  140. ## 錯置的職責
  141.  
  142. ## 不適當的靜態宣告
  143.  
  144. ## 使用具解釋性的變數
  145.  
  146. ## 函式名稱要說到做到
  147.  
  148. ## 瞭解演算法
  149.  
  150. ## 讓邏輯相依變成實體相依
  151.  
  152. ## 用多型取代 if/else 或 switch/case
  153.  
  154. ## 遵循標準的慣例
  155.  
  156. ## 用有名稱的常數取代魔術數字
  157.  
  158. ## 要精確
  159.  
  160. ## 結構勝於常規
  161.  
  162. ## 封裝條件判斷
  163.  
  164. ## 避免否定的條件判斷
  165.  
  166. ## 函式應該只做一件事
  167.  
  168. ## 隱藏時序耦合
  169.  
  170. ## 不要隨意
  171.  
  172. ## 封裝邊界條件
  173.  
  174. ## 函式內容應該下降抽象層次一層
  175.  
  176. ## 可調整的資料應放置於高階層次
  177.  
  178. ## 避免傳遞型導覽
  179.  
  180. # 物件導向式程式語言
  181.  
  182. ## 利用萬用字元來避免冗長的引入列表
  183.  
  184. ## 不要繼承常數
  185.  
  186. ## 常數和列舉
  187.  
  188. # 命名
  189.  
  190. ## 選擇具描述性質的名稱
  191.  
  192. ## 在適當的抽象層次選擇適當的命名
  193.  
  194. ## 盡可能使用標準命名法
  195.  
  196. ## 非模稜兩可的名稱
  197.  
  198. ## 較大範圍的視野使用較長的名稱
  199.  
  200. ## 避免編碼
  201.  
  202. ## 命名應該描述可能的程式副作用
  203.  
  204. # 測試
  205.  
  206. ## 不足夠的測試
  207.  
  208. ## 使用涵蓋率工具
  209.  
  210. ## 不要跳過簡單的測試
  211.  
  212. ## 被忽略的測試是對模稜兩可的疑問
  213.  
  214. ## 測試邊界條件
  215.  
  216. ## 在程式錯誤附近進行詳盡的測試
  217.  
  218. ## 失敗的模式是某種啟示
  219.  
  220. ## 測試涵蓋率模式可以是一種啟示
  221.  
  222. ## 測試要夠快速
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement