0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

爛代碼你能忍嗎?優(yōu)秀的代碼VS糟糕的代碼

C語言編程基礎(chǔ) ? 來源:未知 ? 作者:伍文輝 ? 2018-03-30 10:09 ? 次閱讀

可持續(xù)開發(fā)不僅在于項(xiàng)目架構(gòu)設(shè)計(jì),還與代碼質(zhì)量密切相關(guān),代碼的整潔度和質(zhì)量成正比?!?Robert C. Martin, “Clean Code”

如果你還沒有發(fā)現(xiàn)代碼質(zhì)量的區(qū)別,如果你從未見過優(yōu)秀的代碼,或者從未見過糟糕的代碼,那么本文將以直觀地對(duì)比,告訴你代碼質(zhì)量究竟會(huì)有多大的區(qū)別。

[ 代碼量 ]

我們知道代碼量顯示著功能的復(fù)雜程度,例如Windows XP的代碼量超過2000萬行,Linux內(nèi)核有1500萬行(2012年)。然而代碼量和功能數(shù)量之間并非線性關(guān)系。

優(yōu)秀的設(shè)計(jì)中,代碼量和功能數(shù)的關(guān)系是這樣的:

糟糕的設(shè)計(jì)中,代碼量和功能數(shù)的關(guān)系是這樣的:

優(yōu)秀的系統(tǒng)往往會(huì)有優(yōu)秀的結(jié)構(gòu)設(shè)計(jì):層次清晰、職責(zé)單一、模塊化,方便擴(kuò)展或者復(fù)用。功能的添加往往只是在現(xiàn)有框架中添加少量代碼。

然而糟糕的設(shè)計(jì)中,層次混亂、互相耦合、難以閱讀,既難以復(fù)用又不易擴(kuò)展。每當(dāng)被要求添加功能時(shí),不得不幾乎完整地實(shí)現(xiàn)整個(gè)功能的流程,并修復(fù)與原系統(tǒng)的所有兼容問題。

[ 注釋]

優(yōu)秀的代碼中,注釋是這樣的:

糟糕的代碼中,注釋是這樣的:

最愚蠢的程序員都能寫出機(jī)器能讀懂的代碼,而優(yōu)秀的程序員能寫出人可以讀懂的代碼。

程序的注釋是為了讓人讀得懂。多數(shù)優(yōu)秀的代碼中,注釋幾乎接近代碼行數(shù)的一半,描述函數(shù)功能、解釋參數(shù)配置、指出陷阱所在。而糟糕的代碼中不僅不含這些注釋,甚至?xí)A舸罅繗堄啻a,可讀性差又難以重構(gòu)。

[ 命名]

優(yōu)秀的代碼中,命名是這樣的:

糟糕的代碼中,命名是這樣的:

命名是為了讓代碼更加容易閱讀,使用規(guī)范的術(shù)語不僅更加易懂,同時(shí)也是開發(fā)者知識(shí)水平和開發(fā)經(jīng)驗(yàn)的表現(xiàn)。如果說以中文拼音命名顯得奇怪,那么直接以a, b, c, d命名的便會(huì)顯得可恨,誰記得你的a是神馬東西!

看一個(gè)經(jīng)典的例子,字符串替換:

稍微有點(diǎn)Javascript常識(shí)的便會(huì)想到正則表達(dá)式:

何必拷貝這一堆的代碼給老板看呢?開發(fā)中確實(shí)有很多時(shí)候,直接拷貝代碼既能立竿見影地完成功能,又不會(huì)影響原有功能。但這樣的代碼多起來之后,萬一功能調(diào)整你便需要重新debug所有的副本。花一些時(shí)間學(xué)習(xí)更優(yōu)雅的用法是值得的。

[ 函數(shù) ]

保持函數(shù)的短小,使你的代碼更加易讀,例如:

將復(fù)雜的邏輯分步驟完成。如果寫在一起將會(huì)是這樣的:

相信我,一旦你寫了這樣的函數(shù),它會(huì)隨著時(shí)間的推移變得越來越長,直到有一天,你也忘了其中的一段代碼到底是做什么的。

事實(shí)上,復(fù)雜的函數(shù)不僅可以按照步驟劃分,更應(yīng)按照層次來細(xì)化。不要在一個(gè)函數(shù)中進(jìn)行不同層次的操作,否則它會(huì)變得非常難懂。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4671

    瀏覽量

    67765
  • 程序員
    +關(guān)注

    關(guān)注

    4

    文章

    945

    瀏覽量

    29682

原文標(biāo)題:沒有對(duì)比就沒有傷害,優(yōu)秀的代碼VS糟糕的代碼

文章出處:【微信號(hào):xx-cyy,微信公眾號(hào):C語言編程基礎(chǔ)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    GPIO如何只更新通知代碼而不是替換舊代碼嗎?

    大家好,當(dāng)我嘗試更改 GPIO 通知時(shí)遇到問題,然后我按下“生成代碼”。但它取代了我的舊代碼。告訴我如何只更新通知代碼而不是替換舊
    發(fā)表于 01-31 07:44

    參考代碼--俄羅斯游戲代碼

    使用C語言編程的參考代碼--俄羅斯游戲代碼
    發(fā)表于 05-20 17:01 ?14次下載

    的 Python 代碼優(yōu)雅又地道

    vs NP (pythonic vs non-pythonic)的討論。pythonic的代碼簡練,明確,優(yōu)雅,絕大部分時(shí)候執(zhí)行效率高。閱讀pythonic的代碼
    的頭像 發(fā)表于 03-06 10:35 ?3545次閱讀

    如何編寫無法維護(hù)的代碼代碼沒有重構(gòu)的風(fēng)險(xiǎn)

    自己弄個(gè)鐵飯碗,因?yàn)槌?b class='flag-5'>你之外,沒人維護(hù)寫的代碼。再而且,如果練就秘籍中的全部招式,那么
    的頭像 發(fā)表于 04-29 19:11 ?2542次閱讀

    什么是低代碼

    傳統(tǒng)的軟件開發(fā)方式需要漫長的時(shí)間才能完成應(yīng)用程序的開發(fā)工作,這容易造成應(yīng)用程序開發(fā)任務(wù)的堆積。為了提高應(yīng)用程序的開發(fā)速度,現(xiàn)在出現(xiàn)了一種低代碼開發(fā)平臺(tái)。知道什么是低代碼開發(fā)嗎?知道
    發(fā)表于 05-09 15:26 ?1920次閱讀

    垃圾代碼應(yīng)該怎么寫

    在 GitHub 上有一個(gè)新項(xiàng)目,它描述了「最佳垃圾代碼」的十九條關(guān)鍵準(zhǔn)則。從變量命名到注釋編寫。這些準(zhǔn)則將指導(dǎo)寫出最亮眼的代碼。 為了保持與原 GitHub 項(xiàng)目一致的風(fēng)格,下文
    的頭像 發(fā)表于 01-18 11:08 ?1914次閱讀

    TouchGFX代碼框架以及如何添加用戶代碼

    和View之間的橋梁,View負(fù)責(zé)顯示,Model負(fù)責(zé)交互,這三大類撐起了TouchGFX的天空,可以再里面任意翱翔。 清除了MVP結(jié)構(gòu)后,對(duì)代碼
    的頭像 發(fā)表于 01-18 11:28 ?2499次閱讀
    TouchGFX<b class='flag-5'>代碼</b>框架以及如何添加用戶<b class='flag-5'>代碼</b>

    九個(gè)單片機(jī)仿真優(yōu)秀案例及源代碼

    九個(gè)單片機(jī)仿真優(yōu)秀案例及源代碼
    發(fā)表于 03-17 09:13 ?161次下載
    九個(gè)單片機(jī)仿真<b class='flag-5'>優(yōu)秀</b>案例及源<b class='flag-5'>代碼</b>

    為什么有時(shí)候會(huì)寫出代碼

    本文的內(nèi)容是最近我剛剛遇到的一個(gè)問題,問題代碼是我自己寫的,也是我自己寫單元測試的時(shí)候發(fā)現(xiàn)的,也是我自己修復(fù)的,修復(fù)完之后,我反思了一下:這樣的問題代碼,我實(shí)習(xí)的時(shí)候都寫不出來。 可是為什么我
    的頭像 發(fā)表于 08-27 10:23 ?1280次閱讀
    為什么有時(shí)候會(huì)寫出<b class='flag-5'>爛</b><b class='flag-5'>代碼</b>

    快速找到代碼運(yùn)行最慢部分的編程神器

    天下武功,唯快不破。 編程也不例外,代碼跑的快,快速找出代碼慢的原因,的碼功就高。 今
    的頭像 發(fā)表于 10-13 16:40 ?1487次閱讀

    微軟最新寫代碼神器代碼之旅

    【導(dǎo)語】:CodeTour(代碼之旅)是微軟官方開發(fā)的 VS Code 擴(kuò)展,允許記錄和回放代碼的演練和思路。 簡介 CodeTour 是一個(gè) VS Code 插件,允許記錄和回放
    的頭像 發(fā)表于 10-26 10:00 ?1608次閱讀

    VS上配置MPI教程(含代碼

    VS上配置MPI教程(含代碼
    發(fā)表于 01-17 11:24 ?1次下載

    什么是整潔的代碼

    WTF/min是衡量代碼質(zhì)量的唯一標(biāo)準(zhǔn),Uncle Bob在書中稱糟糕代碼為沼澤(wading),這只突出了我們是糟糕代碼的受害者。國內(nèi)有
    的頭像 發(fā)表于 01-30 10:45 ?437次閱讀

    靜態(tài)代碼塊、構(gòu)造代碼塊、構(gòu)造函數(shù)及普通代碼塊的執(zhí)行順序

    在Java中,靜態(tài)代碼塊、構(gòu)造代碼塊、構(gòu)造函數(shù)、普通代碼塊的執(zhí)行順序是一個(gè)筆試的考點(diǎn),通過這篇文章希望大家徹底了解它們之間的執(zhí)行順序。 1、靜態(tài)
    的頭像 發(fā)表于 10-09 15:40 ?977次閱讀
    靜態(tài)<b class='flag-5'>代碼</b>塊、構(gòu)造<b class='flag-5'>代碼</b>塊、構(gòu)造函數(shù)及普通<b class='flag-5'>代碼</b>塊的執(zhí)行順序

    vs中如何快速注釋多行代碼

    VS中,快速注釋多行代碼可以通過以下幾種方法實(shí)現(xiàn)。我將詳細(xì)介紹每種方法的步驟和應(yīng)用場景。 方法一:塊注釋 塊注釋是一種常見的注釋多行代碼的方法。它適用于需要注釋大塊代碼的情況,可以方
    的頭像 發(fā)表于 11-22 10:26 ?1.5w次閱讀