# 拔草囉! ### 專案其實就像村莊一樣。你一定要拔掉那些雜草----也就是在你的程式碼庫裡不斷出現的那些小瑕疵 雜草:那些很容易修正,但也很容易被忽略的小問題。它並不會在其他地方引起什麼問題。有所改變的,只是少了些雜草。 有雜草的程式碼 ```c= // @brief Remove duplicate integers from a vector // // @param values Integer vector to compress template <class T> void compressVector( vector<T> & values, bool (* is_equal)(const T &, const T &)) { if (values.size() == 0) return; int iDst = 1; for (int iSrc = 1, c = values.size(); iSrc < c; ++iSrc) { // Check for unqiue values if (!is_equal(values[iDst - 1], values[iSrc])) { values[iDst++] = values[iSrc]; } } values.resize(iDst); } ``` 雜草 1. 程式碼註解跟實作內容不符(我們只刪掉相鄰的重複項目而已) 2. 錯別字 ```c= // @brief Compress sequences of equal values in a vector // // For any sequence of values in the vector considered equal, keep only // the first value in that sequence, removing the duplicates. // // @param values Vector to compress // @param is_equal Comparison function to use template <class T> void compressVector( vector<T> & values, bool (* is_equal)(const T &, const T &)) { if (values.size() == 0) return; int iDst = 1; for (int iSrc = 1, c = values.size(); iSrc < c; ++iSrc) { // Check for unique values if (!is_equal(values[iDst - 1], values[iSrc])) { values[iDst++] = values[iSrc]; } } values.resize(iDst); } ``` 雜草 1. 命名:i/c這兩個變數沒有遵循約定慣例(index/count) 2. is_equal應該是isEqual 3. 大括號格式不一至 4. 把多個參數全都放在for語句中 ```c= // @brief Compress sequences of equal values in a vector // // For any sequence of values in the vector considered equal, keep only // the first value in that sequence, removing the duplicates. // // @param values Vector to compress // @param isEqual Comparison function to use template <class T> void compressVector( vector<T> & values, bool (* isEqual)(const T &, const T &)) { int count = values.size(); if (count == 0) return; // Copy values that aren't equal to their predecessor int destIndex = 1; for (int sourceIndex = 1; sourceIndex < count; ++sourceIndex) { if (!isEqual(values[destIndex - 1], values[sourceIndex])) { values[destIndex++] = values[sourceIndex]; } } values.resize(destIndex); } ``` ### 雜草鑑定 - 所發現的問題,安不安全 - 我們基本上就是在不影響功能情況下,提高了程式碼的可讀性和一制性 ### 雜草怎長出來的? - 對於某些程式設計師來說很像雜草的東西,在另一位程式設計師眼中可能是一朵花。 - 對於註解說明感到疑惑,但對程式碼理解沒有足夠信心 - 團隊新成員所寫出來得程式碼(雖然資深程式設計師有能力修改,但也讓新成員少掉一個可以學習專案格式的機會)