iT邦幫忙

2022 iThome 鐵人賽

DAY 9
0

好吧這原本不在我想像中會說的篇幅範圍內,今天依照我預想的狀況應該是要放GameLoop那篇,但我躺在床上想著那些怎麼處理那些堆積如山的遺留程式碼,一邊隨意地翻閱相關書籍時,我默默地看到了一段這樣的句子

自動重構工具的支援可以讓你無需做任何特殊準備,就可以開始對大方法進行分解…

然後我的忽然驚覺,雖然我確實會用上Visual Studio來做判斷程式寫法正確性跟重新命名的功能,但除此之外的功能我都鮮少使用。結果我大部分的重構動作都是自己手動重構,因此花費了不少時間在做些複製貼上的行為,一不小心還會把程式搞壞。所以我決定痛定思痛,要來認真學一下Visual Studio有哪些常用的重構指令,防止未來又發生這類事情。

但又認真想想,其實好像還可以講些可以比較不需要用滑鼠編輯的鍵盤操作之類的,所以這篇就出現了。

重構

反白跟選取特定程式時、要是有https://ithelp.ithome.com.tw/upload/images/20220923/20151894C4H9JkHlRQ.pnghttps://ithelp.ithome.com.tw/upload/images/20220923/20151894SnxkHN4ufU.png,可以按ALT + Enter 或 Ctrl + .叫出指令,只能說沒有這功能重構幾乎會變得超困難的事情

不過Ctrl + .在是中文輸入法的情況下會變成叫出逗號,要注意一下

Rename

將所有與該名稱一樣來源的名稱改掉
Rename

Extract a method

將選取範圍的程式包成一個新的method
Extract code

Move to Namespace

可以移動Namespace

還沒改動前
UseableUnitCountSubject.cs

namespace LinXuan.Common.GameEvent 
{ 
    public class UseableUnitCountSubject : IGameEventSubject 
    { 
        public UnitCountEventArgs UnitCountEventArgs { get; private set; } 
        public override void SetParameter(object parameter) 
        { 
            Notify(); 
        } 
    } 
    public class FooGameEventSubject : IGameEventSubject 
    { 
        private int m_FooNumber; 
    } 
}

將namespace的名稱反白後按Ctrl+Enter,會跳出Move to Namespece的提示,這時更改為想要的名稱

改動後

UseableUnitCountSubject.cs

namespace LinXuan.Common.GameEvent.Test 
{ 
    public class UseableUnitCountSubject : IGameEventSubject 
    { 
        public UnitCountEventArgs UnitCountEventArgs { get; private set; } 
        public override void SetParameter(object parameter) 
        { 
            Notify(); 
        } 
    } 
    public class FooGameEventSubject : IGameEventSubject 
    { 
        private int m_FooNumber; 
    } 
}

操作

F12

快速跳到參考
Go to definition

ALT長按+上/下方向鍵

移動程式碼
Move up and down

Shift長按+方向鍵

反白程式碼
Selected code

Ctrl+左右方向鍵

可以快速跳過字符,不用一個字母一個字母選過去
Break character

而要是同時長按Shift + Ctrl,在按方向鍵時就有可以快速反白的功能

Ctrl + Q

找程式碼
Find code

參考資料

Keyboard shortcuts in Visual Studio
Working Effectively with Legacy Code中文版:管理、修改、重構遺留程式碼的藝術


上一篇
Day 8:Singleton模式
下一篇
Day 10:GameLoop
系列文
如何在Unity裡寫出具有一定擴充性的遊戲30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言