1

图说 Android Studio 技巧:TODO 用法及自定义 TODO

 2 years ago
source link: http://www.androidchina.net/7336.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

图说 Android Studio 技巧:TODO 用法及自定义 TODO – Android开发中文站

你的位置:Android开发中文站 > Android开发 > 开发进阶 > 图说 Android Studio 技巧:TODO 用法及自定义 TODO

在开始之前,我们先来看看开发过程中,面对以前写的代码常会碰到的问题:

  • 这块代码好几次用到了,应该抽出去;
  • 这个算法可以换个更高效的写法;
  • 这段逻辑绕来绕去,其实可以换个思路。

相信许多人都遇到过这些情况,那么,此时我们该怎么做呢?

呵,这还用问?

  • 重复代码? 顺手就抽出去了;
  • 算法效率堪忧? 你倒是优化啊;
  • 逻辑不清晰? 还不赶紧重构,等啥。

如果你是这么想的,我觉得你肯定是没体验过牵一发而动全身的感觉(除非有足够完善的单元测试),因为这么做不仅容易引发不可预知的 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 也不是不可以,系统能识别,只不过这样效率太低了。

// REFACTOR: 2017/5/1 待重构

下面,跟随我一起添加一个 REFACTOR 的代码模版吧。

2. 添加 REFACTOR 代码模版

通过右上角的菜单, File -> Settings -> Editor -> Live Templates 打开代码模版设置页面,找到 AndroidComments 并展开,你会发现熟悉的 fixme 和 todo,我们就仿着它们添加我们的代码模版。不了解的同学可以点击右下角 Help 简单学习下,不影响理解后面的教程。

首先,点中 AndroidComments,点击右上角 ”+“,选择 Live Template :

然后,在下方出现的面板中填上对应内容,分别是:缩写、描述、模版文本。

  • 缩写:我们在代码中敲对应缩写,就会出现智能提示;
  • 描述:智能提示时的描述;
  • 模版文本:缩写对应的补齐后的文本(不局限于代码),在这可以声明变量;

此处我填写内容如下:

如图,在 模版文本 中,我使用  声明了日期变量,使用  声明了描述代办的变量,变量是用来占位的。那这两个变量到底如何赋值呢?

注意右侧的 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 用法及自定义 TODO 全部介绍完毕,希望对你有所帮助。

转载请注明:Android开发中文站 » 图说 Android Studio 技巧:TODO 用法及自定义 TODO


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK