分析一套源代碼的代碼規範和風格並討論如何改進優化代碼

1. 結合工程實踐選題相關的一套源代碼,根據其編程語言或項目特色,分析其在源代碼目錄結構、文件名/類名/函數名/變量名等命名、接口定義規範和單元測試組織形式等方面的作法和特色;mysql

    工程實踐爲爬取用戶評論在對這些數據進行分析,所以選取了一套爬取用戶微博信息的代碼進行分析,下圖是該程序的結構:sql

 

    

search_spider - 根據關鍵字和時間進行爬取的模塊 數據庫

----hour_fenge.py 時間分隔函數:對要搜索的時間期限進行以每小時爲單位的劃分,返回包含全部時間單位的列表編程

----search_start.py 根據關鍵字和時間條件進行爬取的主要函數:其中包括爬取某頁所有微博、微博全部頁數的計算、保存數據庫等功能cookie

tools - 工具模塊 編程語言

----Config.cfg 數據庫等配置文件ide

----Cookie_Process.py cookie處理函數:其中包括獲取文件中存儲的cookie、更新文件中存儲的cookie等功能函數式編程

----Date_Process.py 時間處理函數:其中包括對爬取到微博的不一樣時間格式進行統一函數

----Emoji_Process.py 表情處理函數:清除掉包含的utf8bm4編碼格式的表情 ----Mysql_Process.py mysql數據庫工具類:其中包括數據庫鏈接、關閉、增刪改查的操做等工具

----Number_Process.py 轉發、評論數處理函數:對爬取到的微博的轉發、評論數進行統一

user_spider - 爬取根據關鍵字搜索到的微博對應的微博用戶的基本資料模塊 

----cookie.file 存儲可用的cookie信息

----user_start.py 爬取用戶資料的主要功能函數:包括獲取所爬取微博的全部用戶ID,並根據每一個ID爬取其基本信息

weibo_spider - 根據某個用戶ID爬取其全部微博的模塊 

-----cookie.file 存儲可用的cookie信息

-----weibo_start.py 爬取用戶所有微博的主要功能函數:其中包括爬取某頁所有微博、微博全部頁數的計算、保存數據庫等功能

comment_spider - 爬取根據關鍵字搜索到的微博對應的微博下的所有評論

----cookie.file 存儲可用的cookie信息

----comment_start.py 爬取微博評論的主要功能函數:包括獲取所爬取微博的全部微博ID,並根據每一個ID爬取其所有評論信息

 

從圖中的代碼結構,咱們能夠發現:

  1. 目錄結構:將各個模塊分隔開放在不一樣的文件夾下,此程序實現了4個功能,每一個功能對應了一個文件夾,而另一個文件夾下存放的是公用的工具類以及相應的配置文件,體現了高內聚低耦合的特色。
  2. 命名:各個文件名均由有意義的英文單詞組成,而多個英文單詞之間由「_」分隔開。對於各個模塊的文件名,英文字母均以小寫字母開頭;而對於tools文件夾下的文件名,英文字母均大寫字母開頭,依次表示與其餘模塊文件的差別。
  3. 單元測試模塊:在此項目中並無發現單元測試模塊,但在正常開發中,單元測試是必不可少的,下圖是使用Java開發的博客項目,能夠看到main文件夾下是正常模塊文件,而resources下存放的是相應的配置文件。Test是模塊測試代碼,相應的resources下存放了對應的配置文件。

 

2. 列舉哪些作法符合代碼規範和風格通常要求;

 

 

  • 註釋

 

 

 

 

  • 命名

     使用有意義的,英文單詞或詞組,不使用漢語拼音

    package/module 名中不要出現 –

 

  • 空格+縮進
 * list, dict, tuple, set, 參數列表的 , 後面加一個空格
 *  dict 的 : 後面加一個空格
 * 操做符兩端加一個空格,如 +, -, *, /, |, &, =
 * 接上一條,在參數列表裏的 = 兩端不須要空格
 * 括號((), {}, [])內的兩端不須要空格
  • 空行
    * function 和 class 頂上兩個空行
    * class 的 method 之間一個空行
    * 函數內邏輯無關的段落之間空一行,不要過分使用空行
    * 不把多個語句寫在一行
    * if/for/while 語句中,即便執行語句只有一句,也要另起一行

3. 列舉哪些作法有悖於「代碼的簡潔、清晰、無歧義」的基本原則,及如何進一步優化改進;

    語句過長,沒有使用換行,雖然是sql語句不是真正操做的代碼,可是閱讀起來也很不方便,可使用「\」控制換行。

 

 

    註釋過於簡單,雖說明了每一個函數的功能,可是對於輸入參數以及輸出狀況沒有說明,對於多人協做開發可能會存在影響。

    配置和代碼放在一塊兒,在這種比較小的項目中雖然不會形成什麼影響。但對於模塊較大以及配置較多的項目中,可能會形成混亂,能夠將全部配置文件都存放在一個文件夾中。

4.總結同類編程語言或項目在代碼規範和風格的通常要求。

  •  命名

          函數、變量及屬性都用小寫單詞拼寫,只見用_鏈接,不遵循駝峯命名法

          類與異常應該首字母大寫,不要用_鏈接

          變量要儘量有意義

  • 空白

          和語法相關的每一層縮進都用4個空格表示,不能混用Tab和空格

          若是一行的字符超過80個時,應進行換行。

          賦值時等號兩邊都要有一個空格

          在使用函數進行函數式編程時,函數之間要空兩行

          在類中的函數,函數之間應該空一行

          函數與類是同一個級別,則他們之間應該空兩行

  • 語句

          判斷變量是否爲None、False或True時,要用is,例如,if a is None

          import語句應放在句首,導入時最好指定具體功能。

          檢測容器不爲空時,應使用if 容器名,例如,lists = [] if lists

  • 註釋

          Python中的註釋分爲單行註釋,多行註釋。

          對某些重要的代碼塊的功能說明,應使用單行註釋

          對整個模塊功能的說明應使用多行註釋

相關文章
相關標籤/搜索