以一個臨時變量取代該參數的位置。 java
首先,咱們解釋清楚「對參數賦值」這個說法的意思。若是你把一個名爲foo的對象做爲參數傳給某個函數,那麼,「對參數賦值」意味着改變foo,使它引用另外一個對象。若是你在「被傳入對象」身上進行什麼操做,那沒問題。咱們只針對「foo被該而指向另外一個對象」這種狀況來討論: 函數
void amethod(Object foo){ 測試
foo.modifyInSomeWay(); //that’s OK spa
foo=anotherObject; //trouble and despair will follow you code
這種作法下降了代碼的清晰度,並且混用了按值傳遞和按引用傳遞這兩種參數傳遞方式。Java 只採用按值傳遞方式,咱們的討論也正是基於這一點。 對象
在按值傳遞的狀況下,對參數的任何修改,都不會對調用端形成任何影響。那些用過按引用傳遞方式的人可能會在這一點上犯糊塗。 input
另外一個讓人糊塗的地方是函數本體內。若是你只以參數表示「被傳遞進來的東西」,那麼代碼會清晰得多,由於這種用法在全部語言中都表現出相同語義。 it
在java中,不要對參數賦值:若是你看到手上的代碼已經這樣作了,請使用Remove Assignments to Parameters io
固然,面對那些使用「出參數」的語言,你沒必要尊徐這條規則。 編譯
1.創建一個臨時變量,把待處理的參數賦值予它。
2.以「對參數的賦值」爲界,將其後全部對此參數的引用點,所有替換爲「對此臨時變量的引用」
3.修改賦值語句,使其爲對新建之臨時變量賦值。
4. 編譯,測試。
咱們從下面這段簡單的代碼開始
double discount( int inputVal, int quantity, int yearToDate ) { if( inputVal > 50 ) { inputVal -= 2; } if( quantity > 100 ) { inputVal -= 1; } if( yearToDate > 10000 ) { inputVal -= 4; } return inputVal; }以臨時變量取代對參數的賦值動做,獲得下列代碼:
double discount(int inputVal, int quantity, int yearToDate ) { int result = inputVal; if( inputVal > 50 ) { result -= 2; } if( quantity > 100 ) { result -= 1; } if( yearToDate > 10000 ) { result -= 4; } return result; }