劣質代碼產生的另外一個原因是管理者的誤導,具體的誤導行為有如下幾種形式:
1. 莫名其妙的代碼規範
代碼規範是為了能夠讓團隊的程式員寫出的代碼像是一個人寫的。本身是好事,但是如果代碼規範制定的時候只是照搬照抄,那麼代碼規範很可能淪為損害代碼品質的幫凶。
A. 每行修改的代碼都要加註釋
每行修改的代碼都要增加註釋是在沒有版本管理工具的時候的做法。因為這樣可以對比修改的代碼。
這種代碼的修改方式導致了一個很重要的功能——重構——無法使用。因為每次重構的時候都會變更很多代碼,並且沒有增加註釋。
正確的做法是把修改履曆增加到版本工具裡。
B. 修改時減少代碼的修改量
修改代碼時盡量減少代碼的修改量是為了減少影響性。
如果在一行處理上要增加一個判定條件,那麼原來的處理是不能動的。這樣代碼就沒有了縮排,當若干個這種代碼累積在一起之後,代碼就基本上不具備可讀性了。
況且代碼版本管理工具都具備代碼比較功能,並且,可以抽出任何兩個版本進行比較。
C. 修改代碼的時候舊代碼不要刪除
修改代碼的時候要把舊的代碼留下,不要把舊的代碼刪除。這是為了能夠弄明白代碼修改的意圖。
遵照這條代碼規範會把代碼改的千瘡百孔,有的地方成段的注釋舊代碼,毫無參考價值。有的地方一段有意義的語句被中間若干條注釋拆成百葉窗。
D. 注釋量和代碼量要達到2:3
代碼中沒有注釋恐怕不是那麼好懂,但是代碼中到處都是注釋恐怕也不會好懂。
當要求注釋量的情況下,注釋就變成了為了注釋而注釋
關於應該如何注釋,我將會在《如何書寫自表達代碼——改變編程習慣——注釋》中講述。
E. 每行代碼不能超過80個字元
以前由於編碼工具收費,有些人用非IDE環境來查看代碼,有些人需要列印代碼,所以規定每行代碼不能超過80個字元。以便求得閱讀上的相容性。
但是,現在的顯示器都是寬屏為主了。每行代碼只有80個字元,右邊會空一大片地方。而且,進階語言的命名往往都不短,再加上類-方法-條件的縮排,基本上80個字元連一條較長的判定語句都放不下。每行80個字元的限制導致了代碼的無端換行。這個過時的規定除了能夠降低代碼的可讀性,沒有什麼別的價值。
F. 每個方法不能超過200行
方法不能太長,太長的代碼會導致閱讀困難。
為什麼是200?據說是統計的。而大多數代碼應該保持在20行以內,少數代碼不超過200行。所以這條規範不如規定為方法不要超過20行;如果方法必須超過20行,那麼方法不要超狗200行。如果單純規定200行,那麼大部分寫成50行也不算違規。結果導致中等規模的方法數量太多。
G. 域變數必須定義成private類型的。
域變數定義成private是為了能夠增加安全性。
把域變數定義為private,然後增加上getter和setter,這和定義成public本身沒有區別。域變數的公開類型應該根據具體應用而定義,並不能無端的全部定義成private。
H. 不準使用do-while
據說不準使用do-while是因為do-while難以閱讀。
於是在一些代碼中會寫成do-while外一組處理,do-while裡再重複一遍。