《代碼整潔之道》- 小結(jié) / we are Code Monkey

一群猴子在森林上竄下跳漠畜,抓著幾個酸桃子,得意洋洋的坐在樹上,確對自己造成的混亂熟視無睹缩滨。

一 序


沒錯柏腻,我們就是這么一群(Code)代碼(Monkey)猴子纸厉。當(dāng)我們在編寫出“可以運(yùn)行”的程序后,我們便得意洋洋的進(jìn)入下一個任務(wù)葫盼,任由這些程序在我們眼皮底下腐爛残腌,造成混亂。

Code Monkey

對于自己造成的混亂遲早都要付出高昂的代價(jià)去修復(fù),與其這樣抛猫,我們還不如在編碼的時候就編寫“干凈的代碼”蟆盹。對于這些“干凈的代碼”,我們可以遵循軟件開發(fā)中的5S原則:

  • 整理:命名的規(guī)范
  • 整頓:把你的代碼放在它應(yīng)該在的地方
  • 清楚:整潔代碼
  • 清潔:代碼風(fēng)格闺金、實(shí)踐手段
  • 身美:不斷改進(jìn)

所有的原則都是為了遵循 “童子軍軍規(guī)” —— 讓營地比你來的時候更整潔

二 整潔的代碼


整潔的代碼沒有固定的標(biāo)準(zhǔn)逾滥,但有大體上的原則來規(guī)范代碼(代碼在我們離開時要比發(fā)現(xiàn)時更整潔):

  • 可以讓閱讀代碼的人感到愉悅 —— 可讀性
  • 代碼的質(zhì)量
  • 好的命名
  • 只做一件事
  • 減少依賴關(guān)系
  • 可以通過所有測試
  • 沒有重復(fù)代碼
  • 包括少量的實(shí)體

三 有意義的命名


一個好的命名并不一定是一開始就寫好的,它是不斷被更好的名稱所替代的败匹。一個好的命名遵循下列的規(guī)范:

  • 名副其實(shí):不需要被注釋也應(yīng)該被理解寨昙、看懂。一個名副其實(shí)的命名可以告訴讀者:
  • 怎么用
  • 做什么事
  • 為什么存在
  • 避免誤導(dǎo):(I 掀亩、O)舔哪,這到底是 I 還是 1,是 O 還是 0;(傻傻分不清)
  • 做有意義的區(qū)分:
  • 不要使用 a1 a2 a3
  • 不要說廢話(student 就不要再寫成 studentInfo / studentData 了)
  • 使用讀得出來的名稱:你應(yīng)該不想讓你的小伙伴一個方法名一個字母一個字母的讀出來吧
  • 使用可搜索的名稱:不要使用硬編碼槽棍,盡量使用常量替代
  • 一致的命名規(guī)則:比如查找都用 find*
  • 不要使用雙關(guān)語

四 函數(shù)


還記得你曾經(jīng)寫過的幾百行代碼的函數(shù)嘛捉蚤,現(xiàn)在在回去看看


所以寫出一手干凈的函數(shù)/方法代碼是非常重要的,這關(guān)系到你寫完代碼之后會被多人(xian)“夸”(qi)的問題炼七,對于整潔的函數(shù):

  • 短欣虑伞:
  • 20 行以內(nèi),不能再多了
  • if / else /while 代碼塊理應(yīng)只該有一行代碼
  • 每個函數(shù)/方法只干一件事(同一層級)
  • 使用描述性的名稱
  • 函數(shù)參數(shù):
  • 一元參數(shù):有輸入應(yīng)該也有輸出
  • 二元參數(shù):盡量不要使用豌拙,除非參數(shù)是有序組成的(new Point(x,y))
  • 三元+參數(shù):封裝成類在傳過去吧
  • 標(biāo)識參數(shù):不要傳過來陕悬,這是在違反一個函數(shù)/方法只干一件事的原則
  • 使用異常替代返回碼
  • 抽離 try-catch
  • 別重復(fù)自己

五 注釋


回想當(dāng)初,年輕的我們還在比看誰寫的注釋多按傅,注釋多的更好∽匠現(xiàn)在再看看當(dāng)初寫的代碼,這是哪個程(da)序(sha)員(bi)寫的注釋逞敷,多久沒維護(hù)了都】袂兀現(xiàn)在回過頭想想,當(dāng)初寫注釋的目的是為了讓讀者更好的了解該函數(shù)的意義推捐,而事實(shí)上裂问,真正好的注釋就是想辦法不去寫注釋,一切盡在函數(shù)名稱上牛柒。除了好的注釋堪簿,其它的都是不(la)好(ji)的注釋:

  • 法律信息
  • 提供信息的注釋(時間格式...)
  • 對意圖的解釋
  • 警告
  • TODO
  • 公共 API

六 格式的目的


格式的最大好處就是可以提高可讀性,方便維護(hù)和拓展皮壁。代碼的格式可以分為:

垂直格式

  • 概念間垂直方向上的間隔(空一行)
  • 垂直方向上的靠近(緊密聯(lián)系的代碼放在一起椭更,不要隔開)
  • 垂直距離
  • 變量聲明:靠近其使用位置
  • 實(shí)體變量:類的頂部
  • 相關(guān)函數(shù):調(diào)用者放在被調(diào)用者的上方(靠近)

橫向格式

  • 根據(jù)是否緊密相關(guān)進(jìn)行:
  • 隔離(等號兩邊加空格)
  • 靠近:(乘號兩邊不加空格)
  • 空范圍:將; 換行
while(...)
;

七 對象和數(shù)據(jù)結(jié)構(gòu)


數(shù)據(jù)抽象應(yīng)該盡可能的以抽象的形態(tài)表述數(shù)據(jù),避免暴露過多的細(xì)節(jié)蛾魄。
墨忒耳律(The Law of Demeter):每個單元/對象/方法應(yīng)當(dāng)對其它單元只擁有有限的了解虑瀑。

在對象 O 的 M 方法中湿滓,只應(yīng)該訪問:

  • 對象 O 本身
  • M 方法的參數(shù)
  • M 方法中創(chuàng)建或?qū)嵗膶ο?/li>
  • 對象 O 直接的組件對象
  • 在 O 的范圍內(nèi)可被全局訪問的全局變量

八 單元測試


TDD 三定律

  • 在編寫不能通過的單元測試之前,不可編寫生產(chǎn)代碼
  • 只可編寫剛好無法通過的單元測試舌狗,不能編譯也算不通過
  • 只可編寫剛好足以通過當(dāng)前代碼的生產(chǎn)代碼

整潔的測試可讀性(構(gòu)造叽奥、測試、校驗(yàn))一定是非常高的痛侍,在單元測試中一般將相關(guān)聯(lián)的語句和斷言放在一起朝氓。整潔的測試遵循 F.I.R.S.T. 規(guī)則:

  • 快速
  • 獨(dú)立:測試之間不該有相互依賴
  • 可重復(fù):任何環(huán)境下都能跑
  • 自足驗(yàn)證
  • 及時:測試代碼先于生產(chǎn)代碼編寫

九 類


函數(shù)應(yīng)該足夠短小,類也應(yīng)該足夠短小主届。且類應(yīng)該

  • 遵守單一權(quán)責(zé)原則:一個類應(yīng)該只有一個加以修改的理由(一個抽屜只放同一類物品)
  • 保持高內(nèi)聚:類中應(yīng)該只有少量的實(shí)體變量赵哲,且類中的每個方法都應(yīng)該操作該實(shí)體

看完《代碼整潔之道》不禁感嘆,代碼原來應(yīng)該這么寫君丁,自己原來寫的代碼真的是太(T)難(M)看(chou)了枫夺。但是感覺還不夠,還應(yīng)該有更多的整潔之道谈截,在看《重構(gòu)》的時候希望能有更大的啟發(fā)筷屡。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末涧偷,一起剝皮案震驚了整個濱河市簸喂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌燎潮,老刑警劉巖喻鳄,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異确封,居然都是意外死亡除呵,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進(jìn)店門爪喘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來颜曾,“玉大人,你說我怎么就攤上這事秉剑》汉溃” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵侦鹏,是天一觀的道長诡曙。 經(jīng)常有香客問我,道長略水,這世上最難降的妖魔是什么价卤? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮渊涝,結(jié)果婚禮上慎璧,老公的妹妹穿的比我還像新娘床嫌。我一直安慰自己,他們只是感情好胸私,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布既鞠。 她就那樣靜靜地躺著,像睡著了一般盖文。 火紅的嫁衣襯著肌膚如雪嘱蛋。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天五续,我揣著相機(jī)與錄音洒敏,去河邊找鬼。 笑死疙驾,一個胖子當(dāng)著我的面吹牛凶伙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播它碎,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼函荣,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了扳肛?” 一聲冷哼從身側(cè)響起傻挂,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎挖息,沒想到半個月后金拒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡套腹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年绪抛,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片电禀。...
    茶點(diǎn)故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡幢码,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出尖飞,到底是詐尸還是另有隱情症副,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布葫松,位于F島的核電站瓦糕,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏腋么。R本人自食惡果不足惜咕娄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望珊擂。 院中可真熱鬧圣勒,春花似錦费变、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至吁峻,卻和暖如春滑负,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背用含。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工矮慕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人啄骇。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓痴鳄,卻偏偏與公主長得像,于是被迫代替她去往敵國和親缸夹。 傳聞我的和親對象是個殘疾皇子痪寻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評論 2 348

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

  • “相對于任何宏偉景愿,對細(xì)節(jié)的關(guān)注甚至是更為關(guān)鍵的專業(yè)性基礎(chǔ)虽惭。首先橡类,開發(fā)者通過小型實(shí)踐獲得可用于大型實(shí)踐的技能和信...
    尋海閱讀 4,714評論 1 27
  • 第二章:做有意義的命名 —(2017-08-03日) 1.名副其實(shí):選個好的命名,見名知意,變量,或函數(shù),或類馮名...
    Mr_歡先生閱讀 762評論 0 10
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,749評論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)趟妥,斷路器猫态,智...
    卡卡羅2017閱讀 134,629評論 18 139
  • 背景 需要在Mac本上安裝一個Windows 7的系統(tǒng),使當(dāng)前Macbook Pro具有雙系統(tǒng)披摄。 準(zhǔn)備 FAT32...
    FlyingPenguin閱讀 4,171評論 0 1