那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

爛代碼你能忍嗎?優秀的代碼VS糟糕的代碼

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

可持續開發不僅在于項目架構設計,還與代碼質量密切相關,代碼的整潔度和質量成正比。—— Robert C. Martin, “Clean Code”

如果你還沒有發現代碼質量的區別,如果你從未見過優秀的代碼,或者從未見過糟糕的代碼,那么本文將以直觀地對比,告訴你代碼質量究竟會有多大的區別。

[ 代碼量 ]

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

優秀的設計中,代碼量和功能數的關系是這樣的:

糟糕的設計中,代碼量和功能數的關系是這樣的:

優秀的系統往往會有優秀的結構設計:層次清晰、職責單一、模塊化,方便擴展或者復用。功能的添加往往只是在現有框架中添加少量代碼。

然而糟糕的設計中,層次混亂、互相耦合、難以閱讀,既難以復用又不易擴展。每當被要求添加功能時,不得不幾乎完整地實現整個功能的流程,并修復與原系統的所有兼容問題。

[ 注釋]

優秀的代碼中,注釋是這樣的:

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

最愚蠢的程序員都能寫出機器能讀懂的代碼,而優秀的程序員能寫出人可以讀懂的代碼。

程序的注釋是為了讓人讀得懂。多數優秀的代碼中,注釋幾乎接近代碼行數的一半,描述函數功能、解釋參數配置、指出陷阱所在。而糟糕的代碼中不僅不含這些注釋,甚至會保留大量殘余代碼,可讀性差又難以重構。

[ 命名]

優秀的代碼中,命名是這樣的:

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

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

看一個經典的例子,字符串替換:

稍微有點Javascript常識的便會想到正則表達式:

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

[ 函數 ]

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

將復雜的邏輯分步驟完成。如果寫在一起將會是這樣的:

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

事實上,復雜的函數不僅可以按照步驟劃分,更應按照層次來細化。不要在一個函數中進行不同層次的操作,否則它會變得非常難懂。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 代碼
    +關注

    關注

    30

    文章

    4825

    瀏覽量

    69040
  • 程序員
    +關注

    關注

    4

    文章

    953

    瀏覽量

    29855

原文標題:沒有對比就沒有傷害,優秀的代碼VS糟糕的代碼

文章出處:【微信號:xx-cyy,微信公眾號:C語言編程基礎】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

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

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

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

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

    的 Python 代碼優雅又地道

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

    如何編寫無法維護的代碼代碼沒有重構的風險

    自己弄個鐵飯碗,因為除了之外,沒人維護寫的代碼。再而且,如果練就秘籍中的全部招式,那么
    的頭像 發表于 04-29 19:11 ?2641次閱讀

    什么是低代碼

    傳統的軟件開發方式需要漫長的時間才能完成應用程序的開發工作,這容易造成應用程序開發任務的堆積。為了提高應用程序的開發速度,現在出現了一種低代碼開發平臺。知道什么是低代碼開發嗎?知道
    發表于 05-09 15:26 ?2003次閱讀

    垃圾代碼應該怎么寫

    在 GitHub 上有一個新項目,它描述了「最佳垃圾代碼」的十九條關鍵準則。從變量命名到注釋編寫。這些準則將指導寫出最亮眼的代碼。 為了保持與原 GitHub 項目一致的風格,下文
    的頭像 發表于 01-18 11:08 ?2042次閱讀

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

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

    九個單片機仿真優秀案例及源代碼

    九個單片機仿真優秀案例及源代碼
    發表于 03-17 09:13 ?161次下載
    九個單片機仿真<b class='flag-5'>優秀</b>案例及源<b class='flag-5'>代碼</b>

    為什么有時候會寫出代碼

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

    快速找到代碼運行最慢部分的編程神器

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

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

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

    VS上配置MPI教程(含代碼

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

    什么是整潔的代碼

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

    靜態代碼塊、構造代碼塊、構造函數及普通代碼塊的執行順序

    在Java中,靜態代碼塊、構造代碼塊、構造函數、普通代碼塊的執行順序是一個筆試的考點,通過這篇文章希望大家徹底了解它們之間的執行順序。 1、靜態
    的頭像 發表于 10-09 15:40 ?1478次閱讀
    靜態<b class='flag-5'>代碼</b>塊、構造<b class='flag-5'>代碼</b>塊、構造函數及普通<b class='flag-5'>代碼</b>塊的執行順序

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

    VS中,快速注釋多行代碼可以通過以下幾種方法實現。我將詳細介紹每種方法的步驟和應用場景。 方法一:塊注釋 塊注釋是一種常見的注釋多行代碼的方法。它適用于需要注釋大塊代碼的情況,可以方
    的頭像 發表于 11-22 10:26 ?1.7w次閱讀
    百家乐作弊| 百家乐视频裸聊| 大发888在线娱乐加盟合作| 百家乐官网真人娱乐城| 状元百家乐的玩法技巧和规则 | 网上百家乐有哪些玩法| 云鼎百家乐官网现金网| 钱隆百家乐分析| 仲巴县| 真钱百家乐哪里最好| 通化县| 百家乐挂机软件| 豪华百家乐官网桌子厂家| 同花顺百家乐的玩法技巧和规则| 定陶县| 百家乐买闲打法| 百家乐官网破解版下载| 如何胜百家乐的玩法技巧和规则 | 威尼斯人娱乐城评价| 百家乐官网赌场策略论坛| 大发888娱乐城高手| 百家乐官网tt赌场娱乐网规则| 德州扑克英语| 百家乐游戏研发| 百家乐官网高人破解| 唐人街百家乐的玩法技巧和规则| 真人百家乐官网蓝盾娱乐平台| 大发888城| 百家乐技巧和规律| 百家乐官网的代理办法| 24山安葬择日吉凶| 思茅市| 百家乐平注常赢玩法技巧| 91百家乐官网的玩法技巧和规则 | 新葡京娱乐城开户| 澳门百家乐走势图怎么看| 百家乐官网防伪筹码套装| 大发888官网e世博备用网址| 百家乐技术下载| 太阳百家乐官网3d博彩通| 大发888老虎机网页版|