# 拔草囉!
### 專案其實就像村莊一樣。你一定要拔掉那些雜草----也就是在你的程式碼庫裡不斷出現的那些小瑕疵
雜草:那些很容易修正,但也很容易被忽略的小問題。它並不會在其他地方引起什麼問題。有所改變的,只是少了些雜草。
有雜草的程式碼
```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);
}
```
### 雜草鑑定
- 所發現的問題,安不安全
- 我們基本上就是在不影響功能情況下,提高了程式碼的可讀性和一制性
### 雜草怎長出來的?
- 對於某些程式設計師來說很像雜草的東西,在另一位程式設計師眼中可能是一朵花。
- 對於註解說明感到疑惑,但對程式碼理解沒有足夠信心
- 團隊新成員所寫出來得程式碼(雖然資深程式設計師有能力修改,但也讓新成員少掉一個可以學習專案格式的機會)