图解 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阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260