
編程界有句名言:“計算機程序是寫給人看的,只是順帶計算機可以執行”。程序易讀,沒有花架子、沒有不必要的提前優化,這是通用的原則。
但是在工程實踐上,什么是好的代碼,取決于代碼滿足要的需求的領域。
一段好的代碼,最少要遵守基本的編程規范,比如命名方式,注視等等,就拿變量名來說,必須讓人通過字面意思大概能知道這個變量是做什么的,代表什么意思,閱讀性要好,否則其他人看到代碼跟看天書一樣,完全不知道是在做什么。同樣的,方法命名也是一個道理。
以下圖舉例來說,兩個方法都是檢查用戶名與密碼是否為空,但是個方法明顯規范于第二個方法,變量名就是賬號與密碼的英文單詞,一看就明白,而第二個方法以a,b,c來命名,沒人知道是啥意思,這種代碼是最差的。
下圖是一段摘自我個人項目的 C 語言代碼(業余時間寫作,非公司資產),可以看到用到了各種教科書都極力反對的 goto 語句,但實際上,如果是 C 語言比較熟練的話,使用 goto 語句可以大大簡化函數返回時的清理代碼,達到類似 C++ 語言 RAII 的效果。
再舉個例子來說,當你的工作是實現一個被廣泛調用的庫函數,比如 C 語言 malloc 這樣的內存分配函數,那么,速度和內存使用效率就是就是更大的需求,函數實現可以使用各種丑陋的優化技巧甚至內嵌匯編等等,但只要滿足基本需求,這些破壞基本可讀性原則的手段就不會影響你的代碼成為一段好的代碼。
在滿足需求的前提下,我認為好的代碼還符合以下特征:
簡單性:能用簡單實現的方法就不要用復雜的方法,越簡單的代碼越容易維護;
可讀性:無論是作者還是他人,都能很容易通過閱讀代碼了解到代碼實現的功能,且代碼的編寫沒有違反常理的地方;
分層與模塊化:從架構的層面讓代碼易于理解與修改;
優雅與簡潔:代碼在滿足功能需求的情況下盡量采用成熟的算法與邏輯,舉個例子,計算從 1 加到 100 的總和,優雅簡潔的方法是使用等差數列公式求和而不是用循環累加;
效率:一般來說符合上面4條的代碼效率不會差,但也應把效率問題牢記在心,比如寫 Java 程序,如果遇到多次字符串相加的情況,隨時記得用 StringBuilder 來替換簡單的字符串連接。
【版權聲明】:本站內容來自于與互聯網(注明原創稿件除外),供訪客免費學習需要。如文章或圖像侵犯到您的權益,請及時告知,我們第一時間刪除處理!謝謝!