賈維斯的智慧工坊

  • Home
  • About
  • Note
  • Project
  • Experience
  • Service
  • Sitemap


MY | NOTES

  1. 首頁
  2. >
  3. 筆記
  4. >
  5. 分享

《無瑕的程式碼:敏捷軟體開發技巧守則》 重點整理

要學會寫給人也看得懂的程式碼
May, 2018
平常寫程式只為了實現功能
並沒有特別留意怎麼寫才是漂亮的程式碼

最近我們為了將一套團隊開發的系統轉交給某公司
而注意到「重構 (Refactoring)」這個名詞

因為我們開發的系統是由許多演算法結合而成
而每個演算法都是由不同的人獨立開發
裡頭的變數命名、程式邏輯都含有每個人的獨特風格
若直接轉交給公司,他們肯定很難了解和應用
因此,為了能夠讓這套系統的程式碼更有水準
我們團隊開始了重構的計畫
更多精彩文章
[Python] 程式加速:Cython環境安裝與範例
Python技巧:新手提升效率的必學語法
[TensorFlow] 環境安裝(Anaconda與GPU加速)
[Python] 速度比較:Numpy與內建函式
如何改寫程式?MATLAB轉Python總整理
所謂的重構就是要達成三件事情:
容易被理解、被修改和被擴充

要達到這個境界的過程不容易
有兩本書受到許多人推薦,分別是
  • 《無瑕的程式碼:敏捷軟體開發技巧守則》
  • 《重構:改善既有程式的設計》

    以下將以我對《無瑕的程式碼:敏捷軟體開發技巧守則》的重點整理
    雖然書中使用java,但只要是物件導向語言(C++、Python)都受用
    本書的重點著重於怎麼寫更容易被理解
    並沒有介紹怎麼寫更聰明
    無瑕的程式碼:敏捷軟體開發技巧守則
    Clean Code: A Handbook of Agile Software Craftsmanship

    作者:Robert C. Martin
    譯者:戴于晉、博碩文化
    出版社:博碩

    1、有意義的命名
    2、函式
    3、註解
    4、縮排
    5、物件及資料結構
    6、羽化:簡單設計程式
    7、平行化
    8、程式碼的氣味和啟發

    1、有意義的命名

    - 好的名字不需要註解
    - 小函式/區域中,才使用無意義/單一字母的名字
    - 容易被搜尋
    - 物件用名詞
    - 函式用動詞 is/has/get/set/cal
    - 變數:小寫大寫大寫 frameSizeLength
    - 參數:大寫_大寫 MAX_LENGTH
    - 在25個字母以內

    2、函式

    - 是非題用bool(由函式retuen)宣告,判斷式中直接用

    	bool isFinish
    	if( isFinish )
    
    - 內容越少越好
    - 一個函式應只做一件事
    - 如果輸入參數彼此相依,創造新物件包裝他們

    3、註解

    - 先試圖改變程式碼,不得已再來新增註解
    - 別廢話,簡短說明目的
    - 可在開頭放版權、公司規範
    - 勿刪、勿動的警告
    - 挑好名稱比打註解有價值

    4、縮排

    - 不等式、分號左右需要空白、括弧旁不需要

    	if(i > 1)
    	for(int i = 0 ; i < 100 ; i++)
    

    5、物件及資料結構

    - 所有變數均使用private,再以getter/setter存取
    - 以re-assign代替declare

    6、羽化:簡單設計程式

    - 完成所有可能經歷到的測試(單元測試)
    - 避免重複的程式碼(以互相呼叫副函式取代)
    - 內容具表達力(好名稱、短函式)

    7、平行化

    - 每個執行緒僅有單一職責
    - 使用資料的複本,勿共享
    - 應可以獨立運作

    8、程式碼的氣味和啟發

    - 註解能刪就刪,保留不得已存在的
    - 若有註解掉的程式碼,要附註使用時機
    - 函式輸入參數最好不要超過三個
    - 函式名稱要和將完成的行為為有關
    - 團隊要先擬定變數和函式的命名規則、擺放位置
    - 注意邊界問題(Boundary)
    - 不呼叫物件中的物件中的值
    - 若程式視野涵蓋很廣,變數名稱要用越長(完整)來解釋

    以上整理可能帶有我個人的喜好,故僅供參考。

    ★ 推薦:博客來試閱 ★
    無瑕的程式碼:
    敏捷軟體開發技巧守則
    簡潔的Python:
    重構你的舊程式

  • ← Back to note