1. 程式人生 > >Android studio中todo的用法

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

當然,你也可以在方法內部對某一行程式碼新增 TODO。

2. 檢視 TODO

在 Android Studio 右下角中有一個 TODO tab,點選即可開啟 TODO 檢視,來檢視專案中標記的 TODO。

檢視 TODO

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

TODO tab

3. 完成 TODO

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

三、 Android Studio FIXME 用法

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

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

1. 新增 FIXME

其用法同 TODO,新增時如下:
新增 FIXME

然後同樣在 TODO 檢視中可以看到:

在 TODO 檢視中可以看到

2. 篩選 FIXME

但是,當專案中 TODO 和 FIXME 較多且混在一起時,找起來可就比較費盡了,此時我們可以使用 “過濾” 功能來區分開 TODO 和 FIXME。

首先,新增過濾 FIXME 的條件,點選 TODO 視窗左側的漏斗,選擇 Edit Filters,按照圖示新增 FIXME 過濾條件:

篩選 FIXME

新增完畢後,再次點選漏斗,選擇剛才新增的 FIXME 過濾條件,在 TODO 檢視中將只會看到 FIXME 標記的 TDOO 事項:

使用過濾 FIXME 的條件

最後,就是解決 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 並展開,你會發現熟悉的 fixmetodo,我們就仿著它們新增我們的程式碼模版。不瞭解的同學可以點選右下角 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。下面看演示,我輸入慢點,注意看我們在上面提到的 預設值跳過 ,在程式碼補齊時對 日期和描述 的影響:

使用 REFACTOR TODO

區別於之前的 todo 和 fixme,自動補齊時加上了預設描述”待重構”,你可以繼續輸入覆蓋,或者直接回車確認。

和 TODO、FIXME 一樣,程式碼高亮並出現在 TODO 檢視中。

TODO檢視中的REFACTOR

五、 結束

至此,有關 TODO 用法及自定義 TODO 全部介紹完畢,希望對你有所幫助,並在實際開發中舉一反三。最後,感謝轉發分享,並發表你的看法。