《編寫可讀代碼的藝術(shù)》之讀后感

代碼應(yīng)當(dāng)易于理解

可讀性基本原理

關(guān)鍵思想: 代碼的寫法應(yīng)當(dāng)使別人理解它所需的時間最小化。

可讀性基本定理總是先于任何其他條例或原則挑豌。

表面層次的改進

如果你的代碼有很棒的名字酗失、寫的很好的注釋义钉,并且整潔地使用了空白符,你的代碼會變得易讀很多规肴。

命名藝術(shù)

  • 選擇專業(yè)的詞
    • 選擇的詞要能表達清楚信息捶闸,比如樹的高度,就可以用 height 而不是 size拖刃。
  • 避免泛泛的名字(或者說要知道什么時候使用它)
    • 好的名字應(yīng)當(dāng)描述變量的目的或者它所承載的值删壮。
    • 比如 tmp,如果這個變量的唯一目的就是臨時存儲兑牡,它的整個生命周期只在幾行代碼之間央碟,這個變量沒有其他職責(zé),不會被傳到其他函數(shù)中國或者被重置以反復(fù)使用发绢,那么就可以使用 tmp硬耍, 但是如果變量最重要的目的不是臨時存儲垄琐,那么就應(yīng)該用一個可以表示變量意義的名字來代替 tmp ,這樣會更加具有描述性经柴。
  • 用具體的名字代替抽象的名字
  • 使用前綴或后綴來給名字附帶更多信息
    • 比如變量如果表示時間狸窘,可以加上單位來讓變量表示更加清晰。
  • 決定名字的長度
    • 如果變量作用域比較小坯认,可以不用附帶太多信息翻擒,名字長度可以短一些。
    • 如果名字中的某些單詞可以拿掉而不會損失任何信息牛哺,那么久可以丟掉這些沒用的詞陋气。
    • 如果變量作用域比較大,可以采用比較長的名字引润,易于理解巩趁。
  • 利用名字的格式來表達含義
    • 有目的地使用大小寫。
  • 不會誤解的名字
    • 很多英語單詞在用來編程時是具有多義性的淳附,在命名的時候议慰,需要考慮這個名字是否會被誤解為另外一種意思,好的名字是不會被誤解的奴曙。

審美藝術(shù)

養(yǎng)眼代碼的原則

  • 選擇一個有意義的順序别凹,并且始終一致地使用它。
  • 讓相似的代碼看上去相似洽糟。比如可以采用列對齊的方式來排列參數(shù)炉菲,讓代碼看上去更清晰易讀。但是這樣也存在維護困難的問題坤溃,所以要慎重考慮拍霜。
  • 把相關(guān)的代碼行分組,形成代碼塊浇雹。比如輸入沉御、實現(xiàn)、輸出就可以分成不同的代碼塊昭灵。

關(guān)鍵思想:一致的風(fēng)格比“正確”的風(fēng)格更加重要吠裆。

注釋藝術(shù)

關(guān)鍵思想:

  • 注釋的目的是盡量幫助讀者了解得和作者一樣多。
  • 不要為那些從代碼本身就能快速推斷的事實寫注釋烂完。

什么時候加注釋

  • 可以為代碼中的瑕疵加注釋试疙,比如TODO、FIXME等抠蚣。
  • 可以用注釋來總結(jié)代碼塊祝旷,易于讀者理解。

加注釋的要點

關(guān)鍵思想:注釋應(yīng)當(dāng)有很高的信息/空間率。

  • 避免使用不明確的代詞怀跛,比如 it距贷。
  • 精確描述函數(shù)的行為。
  • 聲明代碼的高層次意圖吻谋,而非明顯的細節(jié)忠蝗。
  • 用含義豐富的詞來使注釋更加簡潔。

控制流藝術(shù)

關(guān)鍵思想:把條件漓拾、循環(huán)以及其他對控制流的改變做的越“自然“越好阁最,運用一種方式使讀者不用停下來重讀你的代碼。

原則:

  • 在寫一個比較時骇两,比較的左側(cè)表達式的值更傾向于不斷變化速种,比較的右側(cè)表達式的值更傾向于常量。
    比如:while(bytes_received < bytes_expected)while(bytes_expected > bytes_received)更易讀懂低千。
  • 在寫if/else語句的語句塊時配阵,if 中國盡量先處理正確的、簡單的情況示血。比如闸餐,用if(debug)而不是if(!debug)
  • 盡量使用線性的代碼,避免深層次的嵌套矾芙。

表達式藝術(shù)

關(guān)鍵思想:把超長的表達式拆分成更容易理解的小塊。

方法:

  • 引入解釋變量來代表子表達式近上,幫助讀者理解長表達式的意思剔宪。
  • 用德摩根定理來操作邏輯表達式,比如壹无,if(!(a && b))可以變?yōu)?code>if(!a || b)葱绒。

變量藝術(shù)

原則

  • 減少變量,比如一個臨時變量只用過一次斗锭,就沒有必要聲明這個變量地淀,因為它沒有壓縮任何冗余代碼。
  • 縮小變量的作用域岖是,變量的作用域越大帮毁,越難掌握在哪里會用到這些變量,有可能會出現(xiàn)局部變量改變?nèi)肿兞康那闆r豺撑。
  • 那些只設(shè)置一次值得變量烈疚,比如const、final等聪轿,可以 讓代碼更容易理解爷肝。

一次只做一件事的藝術(shù)

關(guān)鍵思想:應(yīng)該把代碼組織得一次只做一件事情。

流程:

  1. 列出代碼所做的所有任務(wù)。
  2. 盡量把這些任務(wù)拆分到不同的函數(shù)中灯抛〗鹕猓或者至少是代碼中的不同的段落中。

把想法變成代碼

流程:

  1. 假設(shè)你面前有一個人对嚼,對著他清楚地描述代碼要做什么夹抗,它的邏輯是什么。
  2. 注意描述中所用的關(guān)鍵詞和短語猪半。
  3. 寫出與描述所匹配的代碼兔朦。

Tips:如果需要,可以買一只小黃鴨磨确,讓它聽你描述沽甥。

少寫代碼的藝術(shù)

關(guān)鍵思想:最好讀的代碼就是沒有代碼。

避免寫新代碼的原則:

  • 從項目中消除不必要的功能乏奥,不要過度設(shè)計摆舟。
  • 重新考慮需求,解決版本最簡單的問題邓了,只要能完成工作就行恨诱。
  • 多讀標(biāo)準庫中的API,保持對它們的熟悉程度。

測試與可讀性

關(guān)鍵思想:測試應(yīng)當(dāng)具有可讀性敛瓷,以便于其他程序員可以舒服地改變或者增加測試茧痕。

改進測試的要點:

  • 測試的輸入/輸出最好可以用一行代碼來描述。
  • 測試失敗后發(fā)出的錯誤信息要易于讓你去跟蹤并修正這個bug厕鹃。
  • 使用最簡單并且能夠完整運用代碼的測試輸入。
  • 給測試函數(shù)取一個有完整描述性的名字乍丈。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末剂碴,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子轻专,更是在濱河造成了極大的恐慌忆矛,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件请垛,死亡現(xiàn)場離奇詭異催训,居然都是意外死亡,警方通過查閱死者的電腦和手機宗收,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門瞳腌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人镜雨,你說我怎么就攤上這事嫂侍《酰” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵挑宠,是天一觀的道長菲盾。 經(jīng)常有香客問我,道長各淀,這世上最難降的妖魔是什么懒鉴? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮碎浇,結(jié)果婚禮上临谱,老公的妹妹穿的比我還像新娘。我一直安慰自己奴璃,他們只是感情好悉默,可當(dāng)我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著苟穆,像睡著了一般抄课。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上雳旅,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天跟磨,我揣著相機與錄音,去河邊找鬼攒盈。 笑死抵拘,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的型豁。 我是一名探鬼主播仑濒,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼偷遗!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起驼壶,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤氏豌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后热凹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體泵喘,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年般妙,在試婚紗的時候發(fā)現(xiàn)自己被綠了纪铺。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡碟渺,死狀恐怖鲜锚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤芜繁,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布旺隙,位于F島的核電站,受9級特大地震影響骏令,放射性物質(zhì)發(fā)生泄漏蔬捷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一榔袋、第九天 我趴在偏房一處隱蔽的房頂上張望周拐。 院中可真熱鬧,春花似錦凰兑、人聲如沸妥粟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽罕容。三九已至,卻和暖如春稿饰,著一層夾襖步出監(jiān)牢的瞬間锦秒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工喉镰, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留旅择,地道東北人。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓侣姆,卻偏偏與公主長得像生真,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子捺宗,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理柱蟀,服務(wù)發(fā)現(xiàn),斷路器蚜厉,智...
    卡卡羅2017閱讀 134,657評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,133評論 25 707
  • 第一部分 打好基礎(chǔ) Laying the Foundation 第一章 歡迎進入軟件構(gòu)建的世界 Welcome t...
    白樺葉閱讀 4,628評論 0 17
  • 這一生也在進取 這分鐘卻在沉睡 曾經(jīng)向往自由 執(zhí)著遠方 你太累了 真的太累了 旁友憐憫你 及時道別沒有罪 你卻依舊...
    心花4ever閱讀 193評論 0 0
  • 好久沒有動筆了长已,來兩條絲瓜。
    貓戀一夏閱讀 213評論 0 1