文章目录
  1. 1. 结果
  2. 2. 准备环境
  3. 3. 步骤分解
  4. 4. 用到的IDE功能简介
    1. 4.1. 快捷键(Shortcuts)
    2. 4.2. 文件模板(File Templates)
    3. 4.3. 活动模板(Live Templates)
    4. 4.4. 代码自动生成(Generating Code)
    5. 4.5. 插件(Plugins)

我们知道在软件开发中,效率是很重要的环节。结对编程时,有些手快的人想到哪里就能编到哪里,恨不得分分钟从手慢的人那儿把键盘抢过来。今天的这篇文章主要是如何用好IntelliJ IDEA这个著名的IDE,以实现:“敲最少的键,编最多的码”。虽说本文的示例是Java,其它语言区别也不大,尤其是当现在的JET BRAINS全家桶已经是如此齐备时。

结果

废话不多说,在环境准备好的情况下,假设我们来测试驱动开发一个计算一天有多少个小时的API。参见以下的两分半小视频:

要是视频不清晰或看不到,就直接到腾讯视频中看720P吧。

如何才能做到”敲最少的键,编最多的码“呢?除了掌握技巧之外,就是多练习实践了。以下就是技巧的内容。

准备环境

首先把环境准备一下。只要有srctest即可。我自己是一个默认的Maven新项目,在pom中引用了junit

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.ggg</groupId>
<artifactId>ggg</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
</project>

专业版的IDEA支持项目模板,如果你对默认的模板不满意,项目模板能够节省你的一部分操作。

步骤分解

  1. 快捷键:在test/java中用快捷键Ctrl+N生成文件。
  2. 文件模版:选择的JUnit正是我事先创建好的文件模板,内容见下文的“功能简介”。这里的一个小诀窍是先按下u,可以过滤掉不需要的模板。
  3. 输入:输入HoursCalculatorTest并回车,测试文件就此生成。
  4. 代码自动生成:移动光标到合适位置,用快捷键Ctrl+N自动生成Test Method
  5. 输入:将测试方法命名为should_get_24_hours_for_1_day
  6. 输入:这里需要新建一个测试目标,即new HoursCalculator()
  7. 快捷键:因为HoursCalculator类还不存在,所以会报错,用快捷键F2移动到下一个错误处,再用快捷键Alt+Enter自动修复错误,选择Create class ‘HoursCalculator’
  8. 代码自动生成:输入org.ggg自动生成HoursCalculator类。
  9. 快捷键:Ctrl+Tab回到上一个文件即我们的测试类。Command+Alt+Vnew HoursCalculator()抽取为一个变量hoursCalculatorCommand+Shift+Enter结束本行,将光标跳至下一行开头。
  10. 输入:输入int hoursByDay = hoursCalculator.getHoursByDay(1)来获取计算结果。小诀窍是只要输入hc,IDEA就会提示hoursCalculator
  11. 代码自动生成:还是Alt+Enter自动修复错误,选择Create method ‘getHoursByDay’,便能在HoursCalculator类中自动生成getHoursByDay方法。
  12. 输入:一路回车,可以把参数名改为days
  13. 快捷键:还是Ctrl+Tab回到测试类,然后Command+Shift+Enter结束本行(分号会自动补齐)。
  14. 输入:输入assertEquals(24,hoursByDay),还是Command+Shift+Enter结束本行(还会调整格式)。
  15. 快捷键:Ctrl+Shift+F10运行测试,红了。用Ctrl+Tab回到HoursCalculator类准备修改实现。
  16. 输入:把返回值从0改为24
  17. 快捷键:Shift+F10运行上个测试,这回绿了。用Ctrl+Tab回到我们的测试类,准备编写下一个测试。
  18. 活动模板:将光标移动到合适的位置,输入testTAB键。可以看到生成了另一个测试方法。当然我们在此也可以用上面的“代码自动生成”,这里不过是用了另一种方法而已。test是我事先创建好的活动模板,内容见下文的“功能简介”。
  19. 输入:将方法命名为should_get_48_hours_for_2_days。之后按照类似上文的方式,实现并执行测试,红了。令方法返回24 * day并再次执行测试,绿了。移动光标到测试方法之外,执行全部测试,都绿了,保证后一个实现不会破坏前一个实现。
  20. 快捷键:现在是tdd的重构阶段。24是一个magic number,所以我们要用Command+Alt+C将其变成一个常量,如hoursInDay。不过常量应该还是大写的蛇式比较符合惯例,于是可以Shift+F6改名。
  21. 插件:我事先安装了string-manipulation插件,所以可以直接使用快捷键Alt+M并选择4. To SCREAMING_SNAKE_CASE将变量改名为HOURS_IN_DAY。其实现在版本的IDEA已经会在快捷键改名时提示HOURS_IN_DAY了,但是插件支持的功能更加丰富一些,并且也能在编辑非java文件时使用。
  22. 快捷键:用Shift+F10运行上次运行的全部测试,依然是绿的。
  23. 快捷键:测试文件还不在包中,用F6将其移入org.ggg中。还可以用Command+Alt+O来优化import部分。
  24. 快捷键:再次用Shift+F10运行测试,依然是绿的,重构完成。

用到的IDE功能简介

快捷键(Shortcuts

我用的是Mac OS X的Keymap。常用的快捷键要牢记,很多时候它决定了程序员的效率如何。JET BRAINS的各种语言的IDE快捷键都比较类似,花点精力记住它决不会吃亏。

文件模板(File Templates

顾名思义,文件模板即是新建文件时使用到的模板。我们在上面的步骤中使用的JUnit活动模板如下:

1
2
3
4
5
6
7
8
9
#if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end
import org.junit.Test;
import static org.junit.Assert.*;
#parse("File Header.java")
public class ${NAME} {
}

它的语法基于Apache Velocity,支持变量,如${PACKAGE_NAME}表示包名,${NAME}表示用户输入的名称,等等。

可以通过在Preferences中搜索File and Code Templates,来创建或修改文件模板。也可以在一开始Ctrl+N时选择Edit File Templates…

活动模板(Live Templates

活动模板与文件模板类似,但它不需要新建文件,可以在文件的任何地方激活,只需要输入名字后加一个TAB即可。我们在上面的步骤中使用的test活动模板如下:

1
2
3
4
@Test
public void $NAME$() {
$END$
}

其中的$END$表示最后光标会出现在哪里。在此,表示光标最后会出现在方法体内,以便于继续编写实现。

可以通过在Preferences中搜索Live Templates,来创建或修改活动模板。

代码自动生成(Generating Code

有许多常用的代码,例如getter、setter、constructor、equals&hashCode等等,IDEA都能够通过这个功能帮助自动生成。

我们在上面的步骤中使用了Ctrl+N生成了junit的测试方法,用Alt+Enter通过修复错误的方式来生成类和方法。

插件(Plugins

IDEA支持许多插件。插件的功能强大,能够做到从修改字符串到语言级别的支持。比如我们用的版本控制系统VCS就是用插件的方式开发的。

我们在上面的步骤中使用了string-manipulation插件。安装完插件,别忘了重启IntelliJ IDEA。你也可以编写自己的插件

文章目录
  1. 1. 结果
  2. 2. 准备环境
  3. 3. 步骤分解
  4. 4. 用到的IDE功能简介
    1. 4.1. 快捷键(Shortcuts)
    2. 4.2. 文件模板(File Templates)
    3. 4.3. 活动模板(Live Templates)
    4. 4.4. 代码自动生成(Generating Code)
    5. 4.5. 插件(Plugins)