偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

《代碼整潔之道》:5大基本要點(diǎn)

開發(fā)
常常有小伙伴推薦羅伯特·C·馬丁的《代碼整潔之道(Clean Code)》。今天我們就來了解一下這本書,它值不值得一看?

常常有小伙伴推薦羅伯特·C·馬丁的《代碼整潔之道(Clean Code)》。今天我們就來了解一下這本書,它值不值得一看?

[[316662]]

關(guān)于此書

《代碼整潔之道》:5大基本要點(diǎn)

《代碼整潔之道》出版于2008年,近年來,一直被列為“亞馬遜最暢銷的五本書”之一。本書作者被親切地稱為“Bob叔叔”,他也是《敏捷宣言》的原作者之一,資歷非常豐富。本書在Goodreads上平均評(píng)分為4.4(評(píng)分人數(shù)超13,000)。可以說,這是一本程序員的必讀書。

本文將本書精簡為五個(gè)要點(diǎn)。

1. 尊重抽象

《代碼整潔之道》:5大基本要點(diǎn)

圖片:abstraction(抽象)圖源: Abstruse Goose

《代碼整潔之道》中寫到:如果要確保函數(shù)僅做一件事,則需要確保每個(gè)函數(shù)的語句都位于同一抽象層次。

為說明這一點(diǎn),馬丁用了以下示例(出自FitNesse):

  1. public String render() throws Exception 
  2.  
  3.  StringBuffer html =new StringBuffer("<hr"); 
  4.  if (size >0) 
  5.    html.append(" size="").append(size + 1).append("\""); 
  6.  html.append(">"); 
  7.  return html.toString(); 

在GitHub上查看no_abstraction.java源代碼

這里至少混合了兩個(gè)抽象層次。第一個(gè)是固定大小的hr標(biāo)簽的高級(jí)概念,第二個(gè)是處理實(shí)際標(biāo)簽構(gòu)造的低級(jí)語法細(xì)節(jié)。為了說明這一點(diǎn),對(duì)代碼進(jìn)行更清晰地重構(gòu),如下所示:

  1. public String render() throws Exception 
  2.   HtmlTag hr =new HtmlTag("hr"); 
  3.   if (extraDashes >0) 
  4.     hr.addAttribute("size",  hrSize(extraDahses)); 
  5.    return hr.html(); 
  6.  } 
  7. private String hrSize(int height) 
  8.   int hrSize = height +1; 
  9.   return String.format("%d", hrSize); 

在GitHub上查看abstraction.java源代碼

注意:

  • Render()函數(shù)現(xiàn)在僅負(fù)責(zé)構(gòu)建hr標(biāo)簽
  • 將構(gòu)建標(biāo)簽的底層詳細(xì)信息的任務(wù)轉(zhuǎn)給HtmlTag模塊
  • 大小格式被抽象為獨(dú)立的函數(shù)

馬丁認(rèn)為:

“分離抽象層次是重構(gòu)最重要的功能之一,也是最難實(shí)現(xiàn)的功能之一。”

當(dāng)然,在以后的代碼中,我會(huì)有更多考慮。

2. 整潔代碼關(guān)乎規(guī)則,要花大量精力

我不希望本文僅是列出編寫整潔代碼的要點(diǎn)和規(guī)則。對(duì)本書而言這也無甚作用——因?yàn)椴扇〗虠l式的教學(xué)方法是遠(yuǎn)遠(yuǎn)不夠的。

相反,在本書中馬丁呼吁發(fā)展強(qiáng)烈的個(gè)人原則感,且不斷說明將“臟代碼”變整潔所需的努力和職責(zé)。本書將其稱為“代碼感”,它要求“嚴(yán)格使用艱難獲得整潔代碼的大量小技巧。”

“整潔代碼并非遵循一組規(guī)則編寫的。不可能因?yàn)閷W(xué)習(xí)一套金規(guī)玉律就成為軟件大師。專業(yè)精神和手工藝來自于推動(dòng)規(guī)則形成的價(jià)值。” —羅伯特·C·馬丁(RobertC. Martin)

就個(gè)人而言,我沒什么自信,所以很喜歡這種說法。就連Bob叔叔都堅(jiān)信編寫代碼是一份需要嚴(yán)肅自律的工作,要花費(fèi)大量精力,真是極大的安慰。為了真正擅于整潔代碼,我們需要迭代我們作為程序員的個(gè)人開發(fā)以及代碼的開發(fā)。

3. 代碼盡量精簡

“函數(shù)的首要規(guī)則是體積小。第二規(guī)則是使其盡可能地變小。” ——羅伯特·C·馬丁

這里有兩個(gè)含義:

  • 函數(shù)本身應(yīng)該簡短——幾乎不超過20行,大多數(shù)情況下少于10行
  • 函數(shù)應(yīng)盡可能不要采用參數(shù)

簡潔函數(shù)能增加代碼的易讀性。這也使我們傾向于編寫功能單一高效的函數(shù)。

對(duì)于類,他也有類似的看法。他建議使用“職責(zé)”而非“代碼行”來衡量類的大小。即一個(gè)類應(yīng)該只有一個(gè)職責(zé)。這就是所謂的“單一職責(zé)原則”(SRP)。

保持代碼簡短是“分劃”策略,如果一個(gè)大文件包含大量冗長而復(fù)雜的代碼,則可以將該文件分為多個(gè)模塊,將模塊分為多個(gè)函數(shù),再將函數(shù)分為多個(gè)子函數(shù),直至看到代碼邏輯和任務(wù)。

4. 編程是工藝

我時(shí)常認(rèn)為,將編程喻為建筑和構(gòu)造并不恰當(dāng)。因?yàn)槌绦騿T不會(huì)做一個(gè)完整的設(shè)計(jì),從頭開始建基,再一步步搭建直至完工。

編程的步驟是:先畫草圖,再反復(fù)添加細(xì)節(jié)。程序員要做的是修改、完善和擴(kuò)展——這些都在各抽象層次上完成,直到軟件滿足要求為止。而軟件永遠(yuǎn)不會(huì)真正完成。

這就是《代碼整潔之道》的中心思想。貫穿全書的要點(diǎn)是:軟件是一門藝術(shù),做軟件就像“畫畫”。作者認(rèn)為編程的本質(zhì)是一門工藝。

圖片:“ Good Code(好代碼)” 網(wǎng)站:xkcd

但如何讓編程從單純地寫代碼變成“工藝”呢?

馬丁認(rèn)為,程序員掌握的主要工具是持續(xù)重構(gòu)和測(cè)試驅(qū)動(dòng)開發(fā)(TDD)。兩者像硬幣的兩面般協(xié)同工作。來看一些概念:

重構(gòu)是在不更改輸出的情況下調(diào)整現(xiàn)有計(jì)算機(jī)代碼結(jié)構(gòu)的過程。

測(cè)試驅(qū)動(dòng)開發(fā)是將需求轉(zhuǎn)換為特定測(cè)試用例,再添加代碼以使測(cè)試通過的過程。

因此,制作軟件的過程可能如下所示:

  • 編寫測(cè)試代碼以驗(yàn)證所需但未實(shí)現(xiàn)的功能。
  • 編寫有效代碼(可能不整潔),并通過測(cè)試。
  • 逐步重構(gòu)代碼(保證每次通過測(cè)試),使代碼在每次開發(fā)迭代中都更加清晰。
“不要想著一次性編程后系統(tǒng)就能正確、漂亮地運(yùn)行。今日的任務(wù)僅僅是讓程序運(yùn)行起來,而重構(gòu)和擴(kuò)展系統(tǒng)是明天的任務(wù)。這是迭代和增量敏捷的本質(zhì)。”

——羅伯特·C·馬丁

因此,本書的中心思想是,整潔代碼是在開發(fā)和實(shí)踐中實(shí)現(xiàn)的,而非簡單地一口氣創(chuàng)建出來。

[[316663]]

來源:Pexels

5. 代碼本身清晰易讀

注釋很少卻清晰、表達(dá)力強(qiáng)的代碼優(yōu)于注釋多的混亂、復(fù)雜的代碼。” ——羅伯特·C·馬丁

在“注釋、有意義的命名和格式“一章中,馬丁強(qiáng)烈主張代碼本身應(yīng)該清晰易讀。示例:

  1. // Check to see if theemployee is eligible for full benefits 
  2. if ((employee.flags & HOURLY_FLAG) && 
  3.     (employee.age > 65)) 

將其重構(gòu)為:

  1. if(employee.isEligibleForFullBenefits()) 

注意:

  • 刪除注釋
  • 條件邏輯封裝到一個(gè)方法中
  • 因?yàn)槭褂玫氖欠椒ǘ皇仟?dú)立函數(shù),因此可以使用實(shí)例變量,從而創(chuàng)建調(diào)用零參數(shù)的方法
  • 給該方法起一個(gè)描述性的名稱,使其職責(zé)更加明確

《代碼整潔之道》關(guān)于命名寫了整整一個(gè)章節(jié),本質(zhì)上是對(duì)Tim Ottinger規(guī)則的詳細(xì)說明。包括:

  • 設(shè)置可讀性高的名稱——例如,int elapsedTimeInDays,而不是in days
  • 使用讀得出來的名稱——例如,客戶而不是DtaRcrd102
  • 避免使用編碼——不要用前綴m_表示"members",也不要使用匈牙利表示法
  • 每個(gè)概念對(duì)應(yīng)一個(gè)詞——不要fetch,retrieve,get多個(gè)概念對(duì)應(yīng)一個(gè)詞

結(jié)語

《代碼整潔之道》中,并非每個(gè)想法都是Bob叔叔提出的,他在書中的各部分都承認(rèn)了這一點(diǎn)。而這反而是使本書如此成功的一個(gè)原因——它是編程界智慧的匯聚,并附有實(shí)例。

如果要說一個(gè)小瑕疵,那就是與高層概念的章節(jié)相比,有關(guān)底層細(xì)節(jié)的章節(jié)有點(diǎn)少。“系統(tǒng)”章只有13頁,僅僅是“注釋“章的一半。但是,我懷疑減少對(duì)系統(tǒng)的重視,是為了將討論保留在他后來的書《架構(gòu)整潔之道(CleanArchitecture)》中。

綜合考慮,這真的是目前最好的編程書籍之一,我會(huì)把該書放到我的2021年書單中。

責(zé)任編輯:趙寧寧 來源: 讀芯術(shù)
相關(guān)推薦

2012-08-01 09:38:17

代碼整潔

2021-01-06 14:42:09

前端Typescript代碼

2012-08-01 09:23:31

代碼

2021-03-07 09:19:31

React代碼整潔代碼的實(shí)踐

2020-12-09 10:49:33

代碼開發(fā)GitHub

2012-09-25 09:28:36

程序員代碼代碼整潔

2010-09-09 13:59:55

CSS

2025-06-27 06:38:19

2010-09-14 13:49:38

CSS代碼

2011-12-29 15:02:27

JavaScript

2019-05-14 09:31:16

架構(gòu)整潔軟件編程范式

2011-12-02 10:19:24

CSS

2021-03-19 07:23:23

Go架構(gòu)Go工程化

2017-11-10 12:43:43

整潔代碼開發(fā)程序員

2020-02-29 08:57:12

智能工業(yè)物聯(lián)網(wǎng)IIoT

2011-06-03 15:06:30

CSS

2011-06-03 15:21:51

CSS

2011-03-31 14:55:04

2024-09-29 10:35:43

2011-03-15 10:29:55

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)