圖解 Android Studio 技巧 | 玩轉 TODO 及自定義 TODO

dianzan.jpg

在開始之前,我們先來看看開發過程中,面對以前寫的代碼常會碰到的問題:

  • 這塊代碼好幾次用到了,應該抽出去;
  • 這個算法可以換個更高效的寫法;
  • 這段邏輯繞來繞去,其實可以換個思路。
  • ……

相信許多人都遇到過這些情況,那么,此時我們該怎么做呢?
呵,這還用問?

  • 重復代碼? 順手就抽出去了;
  • 算法效率堪憂? 你倒是優化啊;
  • 邏輯不清晰? 還不趕緊重構,等啥。

如果你是這么想的,我覺得你肯定是沒體驗過牽一發而動全身的感覺(除非有足夠完善的單元測試),因為這么做不僅容易引發不可預知的 bug,同時很有可能導致項目 delay。

要知道,大多數公司的開發周期都很緊,我們應該沿著主線任務推進,先保證新的需求實現了,主要功能能夠 work 并自測通過了,時間富余的情況下再去想著優化或者重構代碼。

你表示不服:說的倒好,時間富余再去優化。那要沒有富余時間呢,就不優化了?不能這么說,如果按照我說的先實現新需求、自測,再優化的步驟,你沒有富余時間去優化,說明啥?說明開發時間正好夠我們新增需求,那你要是在開發過程中提前去干了優化的事,那需求還能做完嗎?

所以我們要搞清楚,對于這些問題,應該先標記著,等主線任務開發完了,再去優化。而不是擼起袖子就整,整不好就沒法收尾,甚至引發其它問題,我是認真的(有經驗的過來人自然懂)。

這里提到的標記著以后再做,就涉及到我們今天要說的 TODO 的概念。說了半天還沒開始,且息怒,之所以先鋪墊,是想讓一些沒有接觸過、或者剛接觸實際開發項目的同學,明白為什么要像下文那么做。

一 TODO 簡介

大家應該都用過記事或備忘軟件,或者是番茄記事之類的,一般這種軟件都有一個功能叫 “TODO List”,也就是待做清單。
我們在日常生活中,經常想起來要做一件事,但手頭正忙來不及做,就會先記在 “TODO List” 中,等忙完手頭的事或有時間了就去做。

開發中也是這樣,遇到像上面那些問題,我們應該先記下來:

  • 重復代碼? 先標記上,回頭抽出去;
  • 算法效率堪憂? 先標記上,回頭優化;
  • 邏輯不清晰? 先標記上,回頭重構。

這里說的標記,并不是在記事軟件上記下來:標注上要做什么,在哪個類哪一行,這太扯了。而是利用 Android Studio 提供的 TODO 功能來實現這一需求。

二 Android Studio TODO 用法

在 Android Studio 中,支持通過 TODO 在代碼中插入標記,其本質上就是特殊的注釋。只不過 TODO 注釋能夠在 Android Studio 提供的 TODO 視圖窗口中查看并快速定位。

1、添加 TODO

很簡單,直接上圖:

添加 todo.gif

當然,你也可以在方法內部對某一行代碼添加 TODO。

2. 查看 TODO

在 Android Studio 右下角中有一個 TODO tab,點擊即可打開 TODO 視圖,來查看項目中標記的 TODO:

查看todo.png

如果沒有 TODO tab,你可以通過左上角的菜單打開,View -> Tool windows -> TODO:

查看todo2.png
3、完成并刪除 TODO

完成 TODO 標記的事件后,就可以刪除該 TODO 注釋。 理想狀態下,我們應該在每一版本發版前,完成所有 TODO,以保持 TODO 視圖中沒有遺留的事項,注意是理想狀態…

三 Android Studio FIXME 用法

除了 TODO 標記,我們還可以使用 Android Studio 提供的 FIXME 來標記一些待修復的問題,FIXME 與 TODO 在本質上沒有任何區別,只是不同的標記罷了。區別于 TODO 標記,FIXME 可以認為是偏向于標記存在問題的 TODO 事項。

一句話弄清二者區別: TODO 是總稱,FIXME 是細分。

1、添加 FIXME

其用法同 TODO,添加時如下:

添加FIXME.gif

然后同樣在 TODO 視圖中可以看到:

查看FIXME.png
2、篩選 FIXME

當項目中 TODO 和 FIXME 較多且混在一起時,找起來可就比較費盡了,此時我們可以使用 “過濾” 功能來區分開 TODO 和 FIXME。
首先,添加過濾 FIXME 的條件,點擊 TODO 窗口左側的漏斗,選擇 Edit Filters,按照圖示添加 FIXME 過濾條件:

篩選FIXME1.png

添加完畢后,再次點擊漏斗,選擇剛才添加的 FIXME 過濾條件,在 TODO 視圖中將只會看到 FIXME 標記的 TDOO 事項:

篩選FIXME2.png

最后,就是解決 FIXME 并刪除了,不再贅述。

四 自定義 TODO

一般我們習慣于直接用 TODO 來標記所有待辦事項,但上面說了 TODO 是總稱,比較廣義,當項目中有大量 TODO 時,你就會發現無法快速定位要找的 TODO,或者無法區分該 TODO 到底屬于哪種類型(雖然可以添加描述,但這個描述的作用太弱了,無法篩選)。

比如,在開發過程中,我們經常發現一些遺留代碼可以重構,此時我們不可能立即著手去做,應該通過 TODO 去標記:

自定義TODO.png

但是,這樣的 TODO 不容易識別,也無法篩選,后期只能通過附加的描述 “待重構” 去辨識,效率太低。此時,按照 FIXME 是 TODO 的細分的邏輯,我們不禁會問:
是不是可以自定義一個細分 TODO ,來標記重構呢?
答案是肯定的。

1、自定義 TODO: REFACTOR

其實,TODO 的本質就是滿足特定正則的注釋,這樣說就好理解了。
通過右上角的菜單, File -> Settings -> Editor -> TODO 打開 TODO 設置面板,點擊右上方的 "+" 添加一個正則,如圖:

在 Pattern 中輸入正則表達式 \brefactor\b.*,然后選擇一個 Icon(可選),點擊 OK 關閉添加面板,再次點擊 OK 應用并關閉設置面板。
添加完 REFACTOR 類型的 TODO 之后,你迫不及待想試試,但發現不管怎樣系統都沒有智能提示以補全代碼,心想我在坑你。其實不然,要知道 TODO 標記 和 智能提示是兩碼事。

你添加了一個自定義的 TODO 正則,系統匹配后將其視為 TODO,在代碼中高亮并顯示在 TODO 視圖中;而智能提示和自動補齊是 代碼模版 的功能。不是一回事,能理解吧?

你在代碼中純手敲一個 REFACTOR 的 TODO 也不是不可以,系統能識別,只不過這樣效率太低了。

自定義TODO.png

下面,跟隨我一起添加一個 REFACTOR 的代碼模版吧。

2、添加 REFACTOR 代碼模版

通過右上角的菜單, File -> Settings -> Editor -> Live Templates 打開代碼模版設置頁面,找到 AndroidComments 并展開,你會發現熟悉的 fixme 和 todo,我們就仿著它們添加我們的代碼模版。不了解的同學可以點擊右下角 Help 簡單學習下,不影響理解后面的教程。
首先,點中 AndroidComments,點擊右上角 ”+“,選擇 Live Template :

添加REFACTOR代碼模版.png

然后,在下方出現的面板中填上對應內容,分別是:縮寫、描述、模版文本。

  • 縮寫:我們在代碼中敲對應縮寫,就會出現智能提示;
  • 描述:智能提示時的描述;
  • 模版文本:縮寫對應的補齊后的文本(不局限于代碼),在這可以聲明變量;
    此處我填寫內容如下:
添加REFACTOR代碼模版2.png

如圖,在 模版文本 中,我使用 data 聲明了日期變量,使用 todo 聲明了描述代辦的變量,變量是用來占位的。那這兩個變量到底如何賦值呢?
注意右側的 Edit variables,即編輯變量。點擊該按鈕,打開 “Edit Template Variables” 面板。表格中,四列分別對應為:變量名稱、表達式、默認值、如果已定義則跳過。
具體的使用方法,同樣可點擊右下角的 Help 看一下,這不是本文的重點。看看我最后設置的值:

添加REFACTOR代碼模版3.png

此處,我將 date 變量的表達式設為 date(),系統將會使用當前日期來填補該變量的占位,并勾選 “跳過” 選項,表示有值的話就不再自己編輯。

同時,對于 todo 變量,是用來添加描述的,無法使用固定表達式賦值,所以我選擇了賦予默認值 “待重構”,并且沒有勾選 “ 跳過”。這樣的話,系統會默認為我賦值 “待重構”,但我的光標還會定在那兒:我可以選擇繼續編輯,或者回車使用默認值。這塊不好理解的話一會看后面的 gif 動圖,就明白了。

編輯變量后,點擊 OK 返回上一頁,最后還需要定義該模版運用的上下文,也就是在哪些地方可以通過縮寫調出代碼模版。

在界面下方,有一段文本:No applicable contexs yet. 后面跟著一個 Define,點擊就會彈出模版運用上下文的列表。我們一般是在 Java 代碼中添加 REFACTOR TODO,所以全選 Java,當然你也可以按需選擇。

最后,最后,最后勾選右側的 Refactor according to style,表示自動格式化代碼(調整對齊、縮進等),最終效果是這樣的:

添加REFACTOR代碼模版4.png

點擊右下角 OK,運用該模版并退出。

3、在代碼中使用 REFACTOR TODO

至此,萬事俱備,只欠東風。在需要添加重構標識的地方,輸入 refactor,輸入過程中,智能提示就出來了,回車確認即可。
下面看演示,我輸入慢點,注意看上面提到的 默認值和跳過 選項,在代碼補齊時對 日期和描述 的影響:

自定義todo.gif

區別于之前的 todo 和 fixme,自動補齊時加上了默認描述 ”待重構”,你可以繼續輸入覆蓋,或者直接回車確認。
和 TODO、FIXME 一樣,代碼高亮并出現在 TODO 視圖中:

添加REFACTOR代碼模版5.png

同樣,你可以像過濾 FIXME 一樣來過濾 REFACTOR,不再貼圖演示。

五 總 結

我們從系統 TODO 開始,分析了 FIXME 與 TODO 的關系,進而想出自定義 TODO,即 REFACTOR。而自定義的 REFACTOR 除了要遵循 TODO 規則外,為了便于使用,我們需要添加 Live Template 以支持智能提示。

以上,有關 TODO 用法及自定義 TODO 全部介紹完畢。該技巧對于提升開發效率還是很有幫助,如果在設置過程中有任何問題,歡迎留言提出。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,739評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,634評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,653評論 0 377
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,063評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,835評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,235評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,315評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,459評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,000評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,819評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,004評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,560評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,257評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,676評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,937評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,717評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,003評論 2 374