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