工作這麼長時間了, 幾乎每天都在和代碼打交道。 看到漂亮的代碼, 就有賞心悅目的感覺, 看到蹩腳的代碼, 真想把原作者揪出來, 狂扁一頓。 每個人對代碼好換的定義不一樣, 下面, 以我個人的了解, 談談我認為代碼中最重要最基本的三個方面, 歡迎大家提出不同的見解。
第一, 代碼要正确。
這裡所謂的正确, 不是數學意義上的百分之百正常, 實際上, 代碼也不可能百分之百正确(算法倒是可以百分之百正确)。 我所說的代碼正确, 意思是指代碼要實作特定的功能。 不能實作特定功能的代碼, 是毫無意義的。 這個道理很簡單, 你買個手機, 但手機不能開機, 你買個燈泡, 但燈泡不亮, 你自然不爽。 是以實作功能是最重要的, 沒有實作功能的代碼, 有什麼意義?
第二, 代碼要有良好的風格。
寫代碼幹什麼?僅僅為了實作功能嗎? 我們知道, 軟體是一個比較複雜的東西, 複雜的東西就有可能有bug, 是以必然需要維護。 軟體開發人員流動性大, 軟體也經常變更, 當别人維護或變更已有代碼時, 他能輕松地讀懂嗎? 當你看你三個月之前寫的代碼的時候, 你能很快知道各個分支的功能嗎? 我看未必。 是以, 我要說, 代碼需要有良好的風格。 有一句話有一定道理: 代碼是寫給人看的, 其次才是給機器執行。 看有的人寫的代碼, 一頭霧水, 注釋沒有注釋, if while for 亂嵌套, 多重嵌套, 不懂得利用空格和空行, 變量和函數的指令不注意規範。最後自問自答:什麼是良好的風格? 良好的風格就是人能快速看懂代碼的意思, 讓人看得不難受, 不惡心。
(補充一下, 代碼的注釋非常重要, 不僅要讓自己明白, 更要讓他人明白。 最近我看到幾個莫名其妙的分支, 然後就不高興了好長時間.)
第三, 代碼要健壯。
這裡的健壯性是指程式要有防錯處理, 看看優秀的大型程式吧, 很多分支都是在處理異常分支, 并在異常分支中加入日志。 你建立一個函數, 就一定能建立成功嗎? 你new一塊記憶體就一定能成功嗎? 你往資料庫寫一個字段, 就能一定成功嗎? 你是否還在用不安全的sscanf, sprintf, strcpy, strcat這些垃圾函數? 或許你要說, 我誇張了, 但是, 當大型程式出了問題, 沒有對異常分支的處理, 怎能快速定位到問題呢? 如果代碼不健壯, 動不動就出問題, 怎能獲得使用者的信任? 一個句柄洩露,你不在乎, 那使用者連續數天開機用你這個東西, 你不擔心會當機嗎?你new了一塊記憶體, 在異常分支又不去釋放它, 那程式要是進入了異常分支怎麼辦? 是以, 代碼要健壯, 盡量抵擋各種惡劣環境。
其餘的, 我就不想扯了。 略不高興地扯一句, 那些還在實際項目中讨論++i和i++哪個效率更高的人(實際上++i的效率确實高一點點), 我懶得說你。最後, 我補充一句, 為了簡便示意, 我部落格中的代碼,基本上躲到了第一點和第二點, 但沒有做到第三點。