1. 程式人生 > >Android Studio 技巧之【Rename】

Android Studio 技巧之【Rename】

快捷鍵

Shift + F6

Android Studio 裡重新命名變數、欄位、方法、類、包的快捷方式。

描述

在程式碼中重新命名變數、欄位、方法、類、包,是一件要小心對待的工作,所有的修改一定確保對上下文有意義。

確保對上下文有意義一般分兩種情況。

1、要保證全部改名。

無論要改名的是變數、欄位、方法、類還是包, 這些變數、欄位、方法、類、包可能已經在整個程式的多處被引用了,所以要改名必須在所有的地方全部修改,不能遺漏。

2、要做有意義的修改,不能無腦似地見了和要改名的字串一樣的字串就改。

一個和要改名的變數名相同的字串,可能在程式碼的別的地方僅僅是另一個字串的一部分,這種情況就不能修改。

針對第一種情況,似乎用全文替換可以快速完成改名的工作。但是全文替換,是見了相同的字串就改,這樣的話,對第二種情況又不合適。這種粗暴的替換有可能修改了不該修改的字串,造成很隱蔽的難以發現的BUG。

所以,要改名的話,一般是用在整個工程檔案中或者當前檔案中全文查詢的方式,找出所有可能要改名的字串,一個個看,一個個修改,該改的改,不該改的地方不改。

但是細緻是一方面,在細緻的同時也要追求工作效率。在Android Studio中用Shift + F6 快捷鍵可以讓我們高效地完成重新命名的工作,而且該操作能確保重新命名對上下文有意義,不會無腦替換掉所有檔案中的名字。

雖然這個快捷鍵功能很強大,但卻不是用了以後直接按Enter

那麼簡單,依然需要手工干預,根據不同的情況選擇哪些改,哪些不改。

所以如果你已經看到這裡,希望你認真地看下去。和前面文章中介紹的哪些快捷鍵不一樣,這個快捷鍵用好了,可以極大地提高效率,但是如果用不好,帶來的麻煩甚至多過其帶來的方便。

使用

下面看示例程式碼:

上圖的程式碼中首先定義了一個全域性變數sVar,這個全域性變數sVarmethod2method3都被引用。

method1中又定義一個本地變數,名字也叫sVar

在每個方法中還有被“” 括起來的文字字串裡的sVar,如method2method3 Log語句裡的"sVar: "以及method1裡的本地變數sVar

的值Local sVar.

現在要將全域性變數sVar改名為gVar.

例子1

僅僅將全域性變數sVar改名為gVar,其它所有註釋和文字字串裡的同名字串全部不改變。

也就是改變全域性變數sVar的定義的部分和在其它地方引用它的部分,即上圖中高亮的的sVar宣告處,method2method3Log語句中引用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改名的同時,其實method2method3裡的兩個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、點選該行文字前面的向右的箭頭,將其開啟。

看到了吧,這裡是說在method1method2method3中的註釋或者文字字串中各有一個sVar.

6、點選第一個method1前的箭頭將其開啟。

這裡指明在50行的String sVar = "Local sVar";裡有一個sVar

這裡我們不需要修改。所以必須將其標識為不修改。

7、在method1() 1 usage這一行上右擊,彈出下面的彈窗。

8、在彈出的選單上有ExcludeRemove這兩個選項。隨便點選任意一個都可以。這裡我們點選Remove將其移除。

現在看到螢幕上只有method2method3了,分別標明在55行和59行各有一個LOG語句,其中有sVar可能需要修改。

而這兩個是我們確實需要修改的。所以不做任何動作,繼續保留。

9、點選Do Refactor按鈕。

現在,可以看到最後的結果完全符合我們的要求。

全域性變數的定義,兩個引用以及在method2method3中兩個LOG語句裡的文字字串中的sVar都被正確地改成了gVar

動畫演示

總結

Shift + F6 快捷鍵,可以快速重新命名變數、欄位、方法、類、包。並且可以確保重新命名對上下文有意義,不會無腦替換掉所有檔案中的名字。

但是使用該快捷鍵需要格外的細心,需要根據程式碼不同的情況手工加以處理。

更多Android Studio技巧