“再一次問好。”
“你好!”
“今天我要給大家講講重構。重構就是在不改變項目功能的情況下改變項目中的代碼。”
“但這怎麼可能?”
“好吧,在最簡單的情況下,我們可以重命名變量和/或方法。畢竟,更改變量的名稱不會使程序運行不同,不是嗎?”
“當然不是。”
“你也可以將大型方法分解成幾個較小的方法。 ”
“您可以將重複的代碼片段提取到一個單獨的方法中。 ”
“一些函數可以聲明為靜態的,然後移到實用程序類中。”
“但這是對重構的狹義解釋。”
“重構有時意味著在不添加新功能的情況下重寫(改進)項目的架構。這是廣義上的重構。”
“IntelliJ IDEA 成為最流行的集成開發環境 (IDE),特別是因為它率先引入了非常強大的重構工具。”
“這些法器是什麼?”
魔術 #1:更改方法的名稱。
“想像一下,您的代碼有一個從 100-500 個不同地方調用的方法。您決定將其名稱更改為更容易理解的名稱。假設它是 run(),而您希望它是 runDownloadTaskAsync()。多快你能做到嗎?
“嗯,首先你需要改變方法的名稱,然後找到程序中所有調用該方法的地方,並在那裡也改變名稱。”
“你怎麼找到那些地方?”
“我只需運行該程序,IntelliJ IDEA 就會向我展示調用不存在的方法的所有位置。”
“好吧。但是現在假設每個方法都有一個解釋性註釋 (JavaDoc) 來解釋該方法的作用——並且舊的方法名稱寫在那裡。”
“我也會改變評論。”
“但也可能有一些變量的名稱與方法的名稱相關聯。最好也更改它們:”
前 | 後 |
---|---|
|
|
“是的,最好也更改那些變量的名稱。不會有什麼壞處。”
“嗯,所有這些都可以使用 IntelliJ IDEA 在幾秒鐘內完成!”
“您將光標放在方法名稱上(或用鼠標單擊它),然後按Shift+F6並開始鍵入所需的方法名稱。”
“這是一個編輯方法名稱的示例。”
“開始編輯:”
“指定一個新名稱:”
“只要輸入一個新名稱,回車,就可以了。這個方法在項目中被調用的任何地方都會被重命名。”
“IntelliJ IDEA 通常還會詢問您是否要在註釋中重命名變量名和方法名。只需單擊“是”,它就會改變一切。”
“更何況,如果項目在本次重構操作之前編譯通過,那麼重構之後也能保證編譯成功。”
“聽起來很有希望。”
“順便說一句,您可以用同樣的方式更改變量名稱。單擊一個名稱後,只需按Shift+F6——然後您可以輸入一個新名稱,IntelliJ 將在任何使用的地方更改變量名稱。 ”
“如果變量是類中的一個字段並且有一個 getter 和一個 setter,那麼 getter 和 setter 的名稱也會更改以匹配變量的新名稱。”
“我嘗試使用變量。一切都像你說的那樣工作,Ellie。重構太棒了!”
“你認為重構就是全部嗎?重構是一個如此廣泛的話題——我們甚至還沒有觸及表面。”
“哇。還有什麼?”
魔術 #2:提取變量。
“有時某些表達式在代碼中經常重複,以至於您需要將它們移到一個單獨的變量中。例如:”
public void printInfo(User user)
{
System.out.println(user.getProfile().getName());
System.out.println(user.getProfile().getAddress().getState());
System.out.println(user.getProfile().getAddress().getCity());
System.out.println(user.getProfile().getAddress().getStreet());
System.out.println(user.getProfile().getAddress().getHomeNumber());
}
public void printInfo(User user)
{
Address address = user.getProfile().getAddress();
System.out.println(user.getProfile().getName());
System.out.println(address.getState());
System.out.println(address.getCity());
System.out.println(address.getStreet());
System.out.println(address.getHomeNumber());
}
“啊。”
“而且代碼可能會復雜得多,有很多重複的部分。”
“程序員不會故意那樣寫。但你經常需要向方法中添加一些東西,然後再添加其他東西——隨著時間的推移,重複的次數會飆升。”
“通過創建一個單獨的變量,我們可以給它一個合適的名稱並提高代碼的可讀性。”
“例如,在上面的例子中,也許我們不是在談論家庭地址。也許我們在談論緊急聯繫人的地址。然後你可以調用這個變量 emergencyContactAddress,而不僅僅是地址。然後,一個程序員第一次看到這段代碼就會明白這裡發生了什麼。”
“是的,我同意。添加這樣的變量是有道理的。”
“你是怎麼做到的?”
“將一個表達式移動到一個單獨的變量中非常簡單。”
第一步:用鼠標選擇表達式。
第 2 步:按 Ctrl+Alt+V
“打開一個窗口,IntelliJ IDEA 會詢問我們是要僅替換選定的表達式還是替換錶達式的所有實例(出現 4 次)?”
“選擇第二個選項來替換所有出現(替換所有 4 次出現)”
第 3 步:按回車鍵。
“IntelliJ IDEA 會提示您輸入一個變量名。它也會對名稱提出自己的建議。不錯,嗯?”
“嗯嗯,對了,我們還打算給變量命名為‘地址’,它是怎麼知道的?”
“通過在表達式中使用最後一個方法的名稱,它返回一個地址。因此,變量很可能將用於存儲地址。”
“結果真的很好。太棒了,艾莉。”
魔術 #3:將代碼提取到一個單獨的方法中。
“但我們本可以做其他事情。我們可以聲明一個新方法,例如printAddress (),然後將所有這些代碼移入其中。”
“我們試試吧。”
第 1 步:選擇使用地址變量的 4 行代碼:
第 2 步:按 Ctrl+Alt+M
“IntelliJ IDEA 確定該方法需要哪些變量,並建議它應該是什麼樣子。“唯一剩下的就是為該方法輸入一個名稱。
第 3 步:輸入 printAddress 作為方法名稱,然後按 Enter 鍵。
“你覺得如何?”
“太棒了。IntelliJ IDEA 不僅將代碼提取到一個單獨的方法中,還添加了所有必需的變量。而且,它猜對了所有名稱。”
GO TO FULL VERSION