動機(Motivation)
臨時變量的問題在于:它們是暫時的,而且只能在所屬函數內使用.由于臨時變量只有在所屬函數內才可見,所以它們會驅使你寫出更長的函數,因為只有這樣你才能訪問到想要訪問的臨時變量.如果把臨時變量替換為一個查詢式(query method),那么同一個class中的所有函數都將可以獲得這份信息.這將帶給你極大幫助,使你能夠為這個class編寫更清晰的代碼.
Replace Temp with Query(120)往往是你運用Extract Method(110)之前必不可少的一個步驟.局部變量會使代碼難以被提煉,所以你應該盡可能把它們替換為查詢式.
這個重構手法較為直率的情況就是:臨時變量只被賦值一次,或者賦值給臨時變量的表達式不受其他條件影響.其他情況比較棘手,但也有可能發生.你可能需要先運用Split Temporary Variable(128)或Separate Query from Modifier(279)使情況變得簡單一些,然后再替換臨時變量.如果你想替換的臨時變量是用來收集結果的(例如循環中的累加值),你就需要將某些程序邏輯(例如循環)拷貝到查詢式(query method)去.