1. 程式人生 > >函數的學習與感悟

函數的學習與感悟

感悟 span 枚舉類 控制 會有 歧義 返回 表達 流程控制

  1. 函數要短。但不是為了短而短,而是為了表達意思,讓讀者看了這個函數而能迅速的把握函數要帶來的信息。盲目的為了短而,並不是初衷,也不是目的。
  2. 函數只做一件事。依照單一職責原則(一個類只會因為一個原因改變)設計函數。一個函數要麽進行流程控制(即方法裏面先調用A方法,再調用B方法,再調用C方法,依次調用,這種方法只起到拼接傳遞,串接流程的作用或邏輯判斷(什麽是邏輯判斷,比如買火車票,根據身份證號判斷,此人是否有買過當天同車次的車票),要麽改變某事物的狀態(比如:買火車票,檢查用戶退票次數,一天是超過三次,如果是就把當前用戶給鎖上,今天就不能再進行買票了,更改用戶的鎖定狀態),要麽計算並返回結果,要麽調用多個下一抽象級的其他函數
    (另一種流程控制而已)。不要有多余功能。
  3. 最好把函數分解成多個抽象層級來設計,同一層級的函數,依照倒樹狀圖來設計函數。
  4. 函數不應該有作為標識的參數,這意味著函數會有多種不同的執行方式被改變。
  5. 函數參數最多有兩個,或者是具體的操作值,或者是封裝之後的參數對象。
  6. 自身行為狀態的改變,不應該讓外界去改變,應該由對象本身對外提供改變的能力,例如:判斷用戶是否可以構買火車票,應該由用戶本身提供是否可以買火車票的函數,而不應該調用一個函數在對象外操作,來改對象內部的操作。把改變類x的狀態的函數調用addFooter(x),改為x.addFooter()
  7. 函數不要返回錯誤碼,這需要你有錯誤碼的枚舉類,並且違反了開放封閉原則(你需要加入新錯誤碼來擴展新錯誤),直接拋出異常就好了。(可以通過繼承父異常來擴展)
  8. 函數名稱描述清楚,不要有歧義,不要容易混淆,註釋寫場景,能不用文檔說明就不用。

函數的學習與感悟