Android Studio 技巧之【Rename】
快捷鍵:
Shift + F6
Android Studio 裡重新命名變數、欄位、方法、類、包的快捷方式。。
描述:
在程式碼中重新命名變數、欄位、方法、類、包,是一件要小心對待的工作,所有的修改一定確保對上下文有意義。
確保對上下文有意義一般分兩種情況。
1、要保證全部改名。
無論要改名的是變數、欄位、方法、類還是包, 這些變數、欄位、方法、類、包可能已經在整個程式的多處被引用了,所以要改名必須在所有的地方全部修改,不能遺漏。
2、要做有意義的修改,不能無腦似地見了和要改名的字串一樣的字串就改。
一個和要改名的變數名相同的字串,可能在程式碼的別的地方僅僅是另一個字串的一部分,這種情況就不能修改。
針對第一種情況,似乎用全文替換可以快速完成改名的工作。但是全文替換,是見了相同的字串就改,這樣的話,對第二種情況又不合適。這種粗暴的替換有可能修改了不該修改的字串,造成很隱蔽的難以發現的BUG。
所以,要改名的話,一般是用在整個工程檔案中或者當前檔案中全文查詢的方式,找出所有可能要改名的字串,一個個看,一個個修改,該改的改,不該改的地方不改。
但是細緻是一方面,在細緻的同時也要追求工作效率。在Android Studio中用Shift + F6 快捷鍵可以讓我們高效地完成重新命名的工作,而且該操作能確保重新命名對上下文有意義,不會無腦替換掉所有檔案中的名字。
雖然這個快捷鍵功能很強大,但卻不是用了以後直接按Enter
所以如果你已經看到這裡,希望你認真地看下去。和前面文章中介紹的哪些快捷鍵不一樣,這個快捷鍵用好了,可以極大地提高效率,但是如果用不好,帶來的麻煩甚至多過其帶來的方便。
使用:
下面看示例程式碼:
上圖的程式碼中首先定義了一個全域性變數sVar
,這個全域性變數sVar
在method2
和method3
都被引用。
method1
中又定義一個本地變數,名字也叫sVar
。
在每個方法中還有被“” 括起來的文字字串裡的sVar
,如method2
和method3
Log
語句裡的"sVar: "
以及method1
裡的本地變數sVar
Local sVar
.
現在要將全域性變數sVar
改名為gVar
.
例子1:
僅僅將全域性變數sVar
改名為gVar
,其它所有註釋和文字字串裡的同名字串全部不改變。
也就是改變全域性變數sVar
的定義的部分和在其它地方引用它的部分,即上圖中高亮的的sVar
宣告處,method2
和method3
中Log
語句中引用sVar
的三個地方。
1、將游標定位到public String sVar
行中的sVar
上
,按 Shift + F6 。
圖中可以看到,public String sVar
行中的sVar
被紅框圍住,代表要對其改名,其它兩個引用處也被高亮選擇了。
螢幕上同時還有一個彈窗,彈窗裡上面四行是給出的建議修改的名稱。這時候其實直接改名後按Enter
即可,但是強烈建議不要這樣做。
保險的做法是根據最下面的提示Press Shift+F6 to show dialog with more option
,繼續按 Shift + F6 。
2、再次按 Shift + F6 。
又出現一個彈窗,彈窗裡的文字框是讓我們輸入要改的名字。
重要的是下面兩個Checkbox
。
第一個是Sesrch in comments and strings
, 意思是在註釋和文字字串裡搜尋。 如果選擇了這個選項,那麼所有在註釋和文字字串裡出現的sVar
都會被包括進來修改。
第二個是Search for text occurrences
, 意思是在字面意義上的搜尋。 這個選項沒有什麼用,因為 Shift + F6 實際上是一個程式碼重構的快捷鍵,不是做文字替換的命令。所以選不選這個選項都不起作用。
在這個例子中,我們不想修改註釋和文字字串裡的同名字串,所以我們不選Sesrch in comments and strings
這個選項。
3、將這兩個選項前的Checkbox
都清空。並且將文字框裡的sVar
改為gVar
。
4、點選Refactor
按鈕。
現在可以看到,應該修改的三個地方全部被修改好了。
文字字串裡的sVar
沒有被修改,因為我們沒有選擇Sesrch in comments and strings
這個選項。
而method1
裡的sVar
則原封不動。因為method1
裡的sVar
實際上是另外一個本地變數,和要修改的全域性變數僅僅是名字相同,完全是兩回事。
這就是符合上下文意義的正確的改名,確保了全部修改和正確的有意義的修改。
動畫演示:
如果你看到這裡,應該已經瞭解了Shift + F6 的方便和高效,但是聰明的你也應該注意到,在給全域性變數sVar
改名的同時,其實method2
和method3
裡的兩個Log語句中的字串sVar
也應該同時修改。不然的話,雖然改名沒有造成程式執行的BUG,但是卻造成了功能上的BUG。
如果不同時修改兩個LOG語句中的sVar
, 那打印出來的LOG就指鹿為馬了,因為現在sVar
已經改名叫gVar
了。
下面我們就用第二個例子來看,怎麼做到一次完美的改名。
例子2:
將全域性變數sVar
改名為gVar
,同時修改所有相關注釋和文字字串裡的sVar
。
1、和例子1一樣,將游標定位到public String sVar
行中的sVar
上,按Shift + F6
2、再次按Shift + F6
3、這次因為要修改文字字串裡的sVar
。所以我們勾選
Sesrch in comments and strings
, 意思是在註釋和文字字串裡搜尋。 選擇了這個選項,那麼所有在註釋和文字字串裡出現的sVar
都會被包括進來修改。
同時在文字框中將sVar
改為gVar
4、點選Refactor
按鈕。
這次在Android Studio的下部出現了一個如圖的視窗。
這個窗口裡,標識出了所有可能需要修改的地方,
最上面的如上圖的部分,說明了要改名的變數。
中間如上圖的這一塊說明,在55行method2
的Log語句引用了sVar
,需要修改。 下面method3
中也有一個引用。可以點擊向右的箭頭將其開啟,檢視詳細的資訊。
上面這兩處是我們肯定要修改的,所以我們不去管它。
因為這次我們選擇了Sesrch in comments and strings
,所以我們最關心的是最下面的部分,看下圖。
這是說sVar
在註釋,文字字串和非程式碼文字中出現了三次。 很明顯,這是我們要仔細檢視並處理的地方。
5、點選該行文字前面的向右的箭頭,將其開啟。
看到了吧,這裡是說在method1
、method2
、method3
中的註釋或者文字字串中各有一個sVar
.
6、點選第一個method1
前的箭頭將其開啟。
這裡指明在50行的String sVar = "Local sVar";
裡有一個sVar
。
這裡我們不需要修改。所以必須將其標識為不修改。
7、在method1() 1 usage
這一行上右擊,彈出下面的彈窗。
8、在彈出的選單上有Exclude
和Remove
這兩個選項。隨便點選任意一個都可以。這裡我們點選Remove
將其移除。
現在看到螢幕上只有method2
和method3
了,分別標明在55行和59行各有一個LOG語句,其中有sVar
可能需要修改。
而這兩個是我們確實需要修改的。所以不做任何動作,繼續保留。
9、點選Do Refactor
按鈕。
現在,可以看到最後的結果完全符合我們的要求。
全域性變數的定義,兩個引用以及在method2
和method3
中兩個LOG語句裡的文字字串中的sVar
都被正確地改成了gVar
。
動畫演示:
總結
用 Shift + F6 快捷鍵,可以快速重新命名變數、欄位、方法、類、包。並且可以確保重新命名對上下文有意義,不會無腦替換掉所有檔案中的名字。
但是使用該快捷鍵需要格外的細心,需要根據程式碼不同的情況手工加以處理。
更多Android Studio技巧