作法(Mechanics)
- 創造一個新函數,根據這個函數的意圖來給它命名(以它[做什么]來命名,而不是以它[怎么做]命名)。
--》即使你想要提煉(extract)的代碼非常簡單,例如只是一條消息或一個函數調用,只要新函數的名稱能夠以更好方式昭示代碼意圖,你也應該提煉
它。但如果你想不出一個更有意義的名稱,就別動。
- 將提煉出的代碼從源函數(source)拷貝到新建的目標函數(target)中。
- 仔細檢查提煉出的代碼,看看其中是否引用了[作用域(scope)限于源函數]的變量(包括局部變量和源函數參數)。
- 檢查是否有[僅用于被提煉碼]的臨時變量(temporary variables)。如果有,在目標函數中將它們聲明為臨時變量。
- 檢查被提煉碼,看看是否有任何局部變量(local-scope
variables)的值被它改變。如果一個臨時變量值被修改了,看看是否可以被提煉碼處理為一個查詢(query),并將結果賦值給相關變量。如果很難
這樣做,或如果被修改的變量不止一個,你就不能僅僅將這段代碼原封不動地提煉出來。你可能需要先使用Split Temporary Variable(128),然后再嘗試提煉。也可以使用Replace Temp with Query(120)將臨時變量消滅掉。
- 將被提煉碼中需要讀取的局部變量,當作參數傳給目標函數。
- 處理完所有局部變量之后,進行編譯。
- 在源函數中,將被提煉碼替換為[對目標函數的調用]。--》如果你將任何臨時變量移到目標函數中,請檢查它們原本的聲明式是否在被提煉碼的外圍。如果是,現在你可以刪除這些聲明式了。
- 編譯,測試。
|