Android studio中todo的用法
在開始之前,我們先來看看開發過程中常會碰到的一些問題:
- 這塊程式碼好幾次用到了,應該抽出去;
- 這個演算法可以換個更高效的寫法;
- 這段邏輯繞來繞去,其實可以換個思路。
- ……
相信許多人都遇到過這些情況,那麼,此時我們該怎麼做呢?
呵,這還用問?
- 重複程式碼? 順手就抽出去了;
- 演算法效率堪憂? 你倒是優化啊;
- 邏輯不清晰? 還不趕緊重構,等啥。
如果你也是這麼想,我覺得要麼你就沒參與過實際專案開發,要麼你就等著專案 delay 被吊打吧。
要知道,大多數公司的開發週期都很緊,我們應該沿著主線任務推進,先保證新的需求實現了,主要功能能夠 work 並自測通過了,時間富餘的情況下再去想著優化或者重構程式碼。
你表示不服:說的倒好,時間富餘再去優化。那要沒有富餘時間呢,就不優化了?
不能這麼說,你想,如果按照我說的先實現新需求、自測,再優化的步驟,你沒有富餘時間說明啥?說明開發時間正好夠我們新增需求,那你要是在開發過程中去幹了優化的事,那需求還能做完嗎?沒毛病…
所以我們要搞清楚,對於這些問題,應該先標記著,等主線任務開發完了,再去優化。而不是管他三七二十一,擼起袖子就整,整不好就沒法收尾,甚至引發其它問題,我是認真的(經歷過的人自然懂)。
這裡提到的標記著以後再做,就涉及到我們今天要說的 TODO 的概念。
說了半天還沒開始,且息怒,之所以先鋪墊,是想讓一些沒有接觸過、或者剛接觸實際開發專案的同學,明白為什麼要像下文那麼做。
一、 TODO 簡介
大家應該都用過記事或備忘軟體,或者是番茄記事之類的,一般這種軟體都有一個功能叫 “TODO list”。什麼意思呢?就是待做清單。
我們在日常生活中,經常想起來要做一件事,但手頭正忙來不及做,就會先記在 “TODO list” 中,等忙完手頭的事或者下班後看看記了哪些,然後去做。
開發中也是這樣,遇到像上面那些問題,我們應該先記下來:
- 重複程式碼? 先標記上,回頭抽出去;
- 演算法效率堪憂? 先標記上,回頭優化;
- 邏輯不清晰? 先標記上,回頭重構。
這裡說的標記,並不是在記事軟體上記下來:標註上要做什麼,在哪個類哪一行,這太扯了。而是利用 Android Studio 提供的 TODO 功能來實現這一需求。
二、 Android Studio TODO 用法
在 Android Studio 中,支援通過 TODO 在程式碼中插入標記,其本質上就是特殊的註釋。只不過 TODO 註釋能夠在 Android Studio 提供的 TODO 檢視視窗中檢視並快速定位。
1. 新增 TODO
當然,你也可以在方法內部對某一行程式碼新增 TODO。
2. 檢視 TODO
在 Android Studio 右下角中有一個 TODO tab,點選即可開啟 TODO 檢視,來檢視專案中標記的 TODO。
如果沒有 TODO tab,你可以通過左上角的選單開啟:View -> Tool windows -> TODO。
3. 完成 TODO
完成 TODO 標記的事件後,就可以刪除該 TODO 註釋。 理想狀態下,我們應該在每一版本發版前,完成所有 TODO,以保持 TODO 檢視中沒有遺留的事項,也只是理想狀態…
三、 Android Studio FIXME 用法
除了 TODO 標記,我們還可以使用 Android Studio 提供的 FIXME 來標記一些待修復的問題,FIXME 與 TODO 在本質上沒有任何區別,只是不同的標記罷了。區別於 TODO 標記,FIXME 可以認為是偏向於標記存在問題的 TODO 事項。
一句話弄清二者區別: TODO 是總稱,FIXME 是細分。
1. 新增 FIXME
其用法同 TODO,新增時如下:
然後同樣在 TODO 檢視中可以看到:
2. 篩選 FIXME
但是,當專案中 TODO 和 FIXME 較多且混在一起時,找起來可就比較費盡了,此時我們可以使用 “過濾” 功能來區分開 TODO 和 FIXME。
首先,新增過濾 FIXME 的條件,點選 TODO 視窗左側的漏斗,選擇 Edit Filters
,按照圖示新增 FIXME
過濾條件:
新增完畢後,再次點選漏斗,選擇剛才新增的 FIXME
過濾條件,在 TODO 檢視中將只會看到 FIXME
標記的 TDOO 事項:
最後,就是解決 FIXME 並刪除了,不再贅述。
四、 自定義 TODO
一般我們習慣於直接用 TODO 來標記所有待辦事項,但 TODO 是總稱,比較廣義,所有 “待辦事項” 都可以用 TODO 標記。當專案中有大量 TODO 時,你會發現無法快速定位要找的 TODO,或者無法區分該 TODO 到底屬於哪種型別(雖然可以新增描述,但這個描述的作用太弱了,無法篩選)。
下面舉個栗子,在開發過程中,我們經常發現一些遺留程式碼可以重構,此時我們不可能立即著手去做,應該通過 TODO 去標記:
// TODO: 2017/5/1 待重構
- 1
但是,這樣的 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 也不是不可以,只不過這樣效率太低了。
// REFACTOR: 2017/5/1 待重構
- 1
下面,跟隨我一起新增一個 REFACTOR
的程式碼模版吧。
2. 新增程式碼模版 Live Template
通過右上角的選單, File -> Settings -> Editor -> Live Templates 開啟程式碼模版設定頁面,找到 AndroidComments
並展開,你會發現熟悉的 fixme
和 todo
,我們就仿著它們新增我們的程式碼模版。不瞭解的同學可以點選右下角 Help
簡單學習下。
1.點中 AndroidComments
,點選右上角 +,選擇 Live Template
:
2.在下方出現的面板中填上對應內容,分別是:縮寫、描述、模版文字。
- 縮寫:我們在程式碼中敲對應縮寫,就會出現智慧提示;
- 描述:智慧提示時的描述;
- 模版文字:縮寫對應的補齊後的文字(不侷限於程式碼),在這可以宣告變數;
此處我填寫內容如下:
3.在模版文字中,我們使用 date 聲明瞭描述代辦的變數,變數是用來佔位的。那這兩個變數到底如何賦值呢?
注意右側的 Edit variables,即編輯變數。點選該按鈕,開啟 “Edit Template Variables” 面板。表格中,四列分別對應了:變數名稱、表示式、預設值、如果已定義則跳過。具體的使用方法,同樣可點選右下角的 Help
看一下,這不是本文的重點。看看我最後設定的值:
此處,我將 date 變數的表示式設為 date(),系統將會使用當前日期來填補該變數的佔位,並勾選 “跳過” 選項,表示有值的話就不再自己編輯。
同時,對於 todo 變數,是用來新增描述的,無法使用表示式賦值,所以我選擇了賦予預設值 “待重構”,並且沒有勾選 ” 跳過”。這樣的話,系統會預設為我賦值 “待重構”,但我的游標還會定在那兒,我可以繼續編輯,或者回車使用預設值。
這塊不好理解的話可以看後面的 gif 動圖,就明白了。
4.編輯變數後,點選 OK
返回上一頁,最後還需要定義該模版運用的上下文,也就是在哪些地方可以通過縮寫調出程式碼模版。
在介面下方,有一段文字:No applicable contexs yet. 後面跟著一個 Define
,點選就會彈出設定模版運用上下文的列表。我們一般是在 Java 程式碼中新增 REFACTOR TODO,所以全選 Java,當然你也可以按需選擇。
5.最後勾選右側的 Refactor according to style
,表示自動格式化程式碼(調整對齊、縮排等),點選右下角 ‘OK’,運用該模版並退出。
最終效果是這樣的:
點選右下角 OK,運用該模版並退出。
3 在程式碼中使用 REFACTOR TODO
在需要新增重構標識的地方,輸入 refactor
,輸入過程中,智慧提示就出來了,回車確認即可。
至此我們就成功添加了一個 REFACOR
型別的 TODO。下面看演示,我輸入慢點,注意看我們在上面提到的 預設值
和 跳過
,在程式碼補齊時對 日期和描述 的影響:
區別於之前的 todo 和 fixme,自動補齊時加上了預設描述”待重構”,你可以繼續輸入覆蓋,或者直接回車確認。
和 TODO、FIXME 一樣,程式碼高亮並出現在 TODO 檢視中。
五、 結束
至此,有關 TODO 用法及自定義 TODO 全部介紹完畢,希望對你有所幫助,並在實際開發中舉一反三。最後,感謝轉發分享,並發表你的看法。