



編程界有句名言:“計(jì)算機(jī)程序是寫(xiě)給人看的,只是順帶計(jì)算機(jī)可以執(zhí)行”。程序易讀,沒(méi)有花架子、沒(méi)有不必要的提前優(yōu)化,這是通用的原則。
但是在工程實(shí)踐上,什么是好的代碼,取決于代碼滿足要的需求的領(lǐng)域。
一段好的代碼,最少要遵守基本的編程規(guī)范,比如命名方式,注視等等,就拿變量名來(lái)說(shuō),必須讓人通過(guò)字面意思大概能知道這個(gè)變量是做什么的,代表什么意思,閱讀性要好,否則其他人看到代碼跟看天書(shū)一樣,完全不知道是在做什么。同樣的,方法命名也是一個(gè)道理。
以下圖舉例來(lái)說(shuō),兩個(gè)方法都是檢查用戶名與密碼是否為空,但是個(gè)方法明顯規(guī)范于第二個(gè)方法,變量名就是賬號(hào)與密碼的英文單詞,一看就明白,而第二個(gè)方法以a,b,c來(lái)命名,沒(méi)人知道是啥意思,這種代碼是最差的。
下圖是一段摘自我個(gè)人項(xiàng)目的 C 語(yǔ)言代碼(業(yè)余時(shí)間寫(xiě)作,非公司資產(chǎn)),可以看到用到了各種教科書(shū)都極力反對(duì)的 goto 語(yǔ)句,但實(shí)際上,如果是 C 語(yǔ)言比較熟練的話,使用 goto 語(yǔ)句可以大大簡(jiǎn)化函數(shù)返回時(shí)的清理代碼,達(dá)到類似 C++ 語(yǔ)言 RAII 的效果。
再舉個(gè)例子來(lái)說(shuō),當(dāng)你的工作是實(shí)現(xiàn)一個(gè)被廣泛調(diào)用的庫(kù)函數(shù),比如 C 語(yǔ)言 malloc 這樣的內(nèi)存分配函數(shù),那么,速度和內(nèi)存使用效率就是就是更大的需求,函數(shù)實(shí)現(xiàn)可以使用各種丑陋的優(yōu)化技巧甚至內(nèi)嵌匯編等等,但只要滿足基本需求,這些破壞基本可讀性原則的手段就不會(huì)影響你的代碼成為一段好的代碼。
在滿足需求的前提下,我認(rèn)為好的代碼還符合以下特征:
簡(jiǎn)單性:能用簡(jiǎn)單實(shí)現(xiàn)的方法就不要用復(fù)雜的方法,越簡(jiǎn)單的代碼越容易維護(hù);
可讀性:無(wú)論是作者還是他人,都能很容易通過(guò)閱讀代碼了解到代碼實(shí)現(xiàn)的功能,且代碼的編寫(xiě)沒(méi)有違反常理的地方;
分層與模塊化:從架構(gòu)的層面讓代碼易于理解與修改;
優(yōu)雅與簡(jiǎn)潔:代碼在滿足功能需求的情況下盡量采用成熟的算法與邏輯,舉個(gè)例子,計(jì)算從 1 加到 100 的總和,優(yōu)雅簡(jiǎn)潔的方法是使用等差數(shù)列公式求和而不是用循環(huán)累加;
效率:一般來(lái)說(shuō)符合上面4條的代碼效率不會(huì)差,但也應(yīng)把效率問(wèn)題牢記在心,比如寫(xiě) Java 程序,如果遇到多次字符串相加的情況,隨時(shí)記得用 StringBuilder 來(lái)替換簡(jiǎn)單的字符串連接。
【版權(quán)聲明】:本站內(nèi)容來(lái)自于與互聯(lián)網(wǎng)(注明原創(chuàng)稿件除外),供訪客免費(fèi)學(xué)習(xí)需要。如文章或圖像侵犯到您的權(quán)益,請(qǐng)及時(shí)告知,我們第一時(shí)間刪除處理!謝謝!
售后服務(wù):13534259410 (7×24小時(shí))
在線 Q Q:253849310 (售前咨詢)
深圳無(wú)雙科技,專注于深圳網(wǎng)站建設(shè)、深圳網(wǎng)站設(shè)計(jì)、深圳網(wǎng)站制作。
服務(wù)客戶超3000家,一站式網(wǎng)站建設(shè)及推廣營(yíng)銷解決方案提供商。
我們的價(jià)值觀:誠(chéng)信、坦誠(chéng)、盡責(zé)、創(chuàng)新。期待與您合作!