關註並回復 [ 加群 ],
邀請你進android技術群
類別: 工具效率
讀完約需
5
分鐘
用心原創,你的 點贊|轉發分享 是對我最大的鼓勵,關註以及時獲取最新推文。
在開始之前,我們先來看看開發過程中,面對以前寫的代碼常會碰到的問題:
-
這塊代碼好幾次用到了,應該抽出去;
-
這個算法可以換個更高效的寫法;
-
這段邏輯繞來繞去,其實可以換個思路。
-
……
相信許多人都遇到過這些情況,那麽,此時我們該怎麽做呢?
呵,這還用問?
-
重復代碼? 順手就抽出去了;
-
算法效率堪憂? 你倒是優化啊;
-
邏輯不清晰? 還不趕緊重構,等啥。
如果你是這麽想的,我覺得你肯定是沒體驗過牽一發而動全身的感覺(除非有足夠完善的單元測試),因為這麽做不僅容易引發不可預知的 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。
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: 2017/5/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 也不是不可以,系統能識別,只不過這樣效率太低了。
// TODO: 2017/5/1 待重構
下面,跟隨我一起添加一個 REFACTOR 的代碼模版吧。
2. 添加 REFACTOR 代碼模版
通過右上角的菜單, File -> Settings -> Editor -> Live Templates 打開代碼模版設置頁面,找到 AndroidComments 並展開,你會發現熟悉的 fixme 和 todo,我們就仿著它們添加我們的代碼模版。不了解的同學可以點擊右下角 Help 簡單學習下,不影響理解後面的教程。
首先,點中 AndroidComments,點擊右上角 ”+“,選擇 Live Template :
然後,在下方出現的面板中填上對應內容,分別是:縮寫、描述、模版文本。
-
縮寫 :我們在代碼中敲對應縮寫,就會出現智能提示;
-
描述 :智能提示時的描述;
-
模版文本 :縮寫對應的補齊後的文本(不局限於代碼),在這可以聲明變量;
此處我填寫內容如下:
如圖,在 模版文 本 中,我使用 data 聲明了日期變量,使用 todo 聲明了描述代辦的變量,變量是用來占位的。那這兩個變量到底如何賦值呢 ?
註意右側的 Edit variables,即編輯變量。點擊該按鈕,打開 “Edit Template Variables” 面板。表格中,四列分別對應為:變量名稱、表達式、默認值、如果已定義則跳過。
具體的使用方法,同樣可點擊右下角的 Help 看一下,這不是本文的重點。看看我最後設置的值:
此處,我將 date 變量的表達式設為 date(),系統將會使用當前日期來填補該變量的占位,並勾選 “跳過” 選項,表示有值的話就不再自己編輯。
同時,對於 todo 變量,是用來添加描述的,無法使用固定表達式賦值,所以我選擇了賦予默認值 “待重構”,並且沒有勾選 “ 跳過”。這樣的話,系統會默認為我賦值 “待重構”,但我的光標還會定在那兒:我可以選擇繼續編輯,或者回車使用默認值。這塊不好理解的話一會看後面的 gif 動圖,就明白了。
編輯變量後,點擊 OK 返回上一頁,最後還需要定義該模版運用的上下文,也就是在哪些地方可以通過縮寫調出代碼模版。
在界面下方,有一段文本:No applicable contexs yet. 後面跟著一個 Define,點擊就會彈出模版運用上下文的列表。我們一般是在 Java 代碼中添加 REFACTOR TODO,所以全選 Java,當然你也可以按需選擇。
最後,最後,最後勾選右側的 Refactor according to style,表示自動格式化代碼(調整對齊、縮進等),最終效果是這樣的:
點擊右下角 OK,運用該模版並退出。
3. 在代碼中使用 REFACTOR TODO
至此,萬事俱備,只欠東風。在需要添加重構標識的地方,輸入 refactor,輸入過程中,智能提示就出來了,回車確認即可。
下面看演示,我輸入慢點,註意看上面提到的 默認值和跳過 選項,在代碼補齊時對 日期和描述 的影響:
區別於之前的 todo 和 fixme,自動補齊時加上了默認描述 ”待重構”,你可以繼續輸入覆蓋,或者直接回車確認。
和 TODO、FIXME 一樣,代碼高亮並出現在 TODO 視圖中:
同樣,你可以像過濾 FIXME 一樣來過濾 REFACTOR,不再貼圖演示。
五
總 結
我們從系統 TODO 開始,分析了 FIXME 與 TODO 的關系,進而想出自定義 TODO,即 REFACTOR。而自定義的 REFACTOR 除了要遵循 TODO 規則外,為了便於使用,我們需要添加 Live Template 以支持智能提示。
以上, 有關 TODO 用法及自定義 TODO 全部介紹完畢。 該技巧對於提升開發效率還是很有幫助,如果在設置過程中有任何問題,歡迎留言提出,或加群交流。
最後,附送高清美照一張,私人珍藏。
「攝於望京 SOHO」
iOS 用戶贊賞通道 [請備註姓名]
一個 有價值、有溫度 的公眾號
一位 愛分享、樂助人 的開發者
期待你的關註並一起交流
感謝點贊或轉發分享
↓
掃碼上車
Tags: 優化 富余 時間 開發 我們 需求
文章來源: