第七章 建立高質量子程序算法
A.基本概念函數
子程序:爲實現一個特定目的而編寫的一個可被調用的方法或者過程。spa
B.內容設計
1.建立子程序的好處:orm
1)下降複雜度 對象
2)引入易懂的抽象,簡化複雜的布爾判斷接口
經過子程序來隱藏一些信息,就不用去考慮這些信息的細節,例如:對某段只返回布爾類型值得代碼進行封裝,使其成爲一個良好命名的函數或方法,則在須要這段代碼的地方直接調用該函數便可,良好的命名可使該子程序的做用一目瞭然,同時又能夠避免去理解代碼的細節,而只關心代碼的功能。例如:執行一項操做前,須要對用戶的合法性進行判斷,則能夠將該判斷代碼封裝爲函數。input
3)避免代碼重複it
4)提升可移植性io
程序中可能有多個地方要用到相同的代碼段,此時就能夠將這些重複出現的代碼段封裝爲子程序,在須要的地方進行調用,同時,若是須要對封裝的代碼段中的某些數據或者算法進行改變,則只須要在封裝的函數體內部進行一次更改便可,而無需在多個地方進行重複更改,作到一改皆改。
在爲不一樣平臺或系統編寫代碼時,必不可少地會遇到一些平臺相關的部分,例如某些組件或API,用子程序來隔離(包裹)這些部分,則能夠在未來的移植工做中節省時間。
2.子程序設計原則
通常的原則就是提升子程序的內聚性,目標是一個子程序只把一件事情作好。(功能內聚性)
3.良好的子程序命名原則
良好的命名能夠提升程序的可維護性,可以清晰地描述子程序所作的一切
1)命名應當描述子程序所作的全部事情。
2)避免使用無心義的,模糊不清的動詞。例如ProcessInput()
3)不要僅經過數字來造成不一樣的子程序名稱(形如XXX1,XXX2)。
4)函數和過程
函數具備返回值,所以,對於函數的命名,應當可以反映出其返回值,例如cos(),customerID.next()等等
過程一般是針對某個對象進行一種操做,所以對於過程的命名,一般應當是語氣強烈的動詞+賓語的形式,該命名可以反映出這個過程所作的操做。
5)使用對仗詞。 使用對仗的命名使代碼具備更好的可讀性。例如OpenFile() 和CloseFile()
4.子程序的參數使用
1)按照 輸入-修改-輸出的順序排列參數。
排列接口參數時,首先列出僅做爲輸入用途的參數,而後是即做爲輸入,又做爲輸出用途的參數,最後是僅做爲輸出用途的參數。
2)若是幾個子程序使用相似的一些參數,則應該讓這些參數的排列順序在這幾個子程序中保持一致。 例如:print($name,$path) ,printf($name,$path,$format)
3)使用全部參數。不傳遞用不到的參數。
4)把狀態和出錯變量放在最後。
5)不要把子程序的參數做爲工做變量,應該使用局部變量。
將子程序的參數做爲工做變量可能會改變該參數的值,例以下面的代碼:
function Sample($inputVal)
{
$intputVal = $inputVal * 3;
return $inputVal; //此處的inputVal的值已經改變了
}
好的作法應當是使用臨時工做變量:
function Sample($inputVal)
{
$temp = $inputVal;
$temp = $temp * 3;
return $temp;
}
6)把參數個數限定在7個之內。