停止键入源代码

简要说明了如何使用 NetBeans 4.0 减少键入内容,以加快创建源代码的速度。

前言

您知道吗,标准键盘上的按键布局是故意设置的,目的是减慢您的打字速度。很奇怪吧,但确实如此。这种布局称为 QWERTY 布局,最初是在 1872 年为第一台打字机选择的,因为这可以防止人们打字太快而使机械印字杆发生碰撞。

当然啦,这只是您应停止键入源代码的众多原因之一,或者更准确地说,是您应该让 NetBeans 替您创建源代码的众多原因之一。本文包含一系列提示以说明如何使用 NetBeans 4.0 更快地编写源代码,并尽量不使用键盘输入内容。

提示

提示 1:使用词语匹配

在源文件中键入一个单词后,您只需在任意位置中输入它的前几个字母,然后按 Ctrl+K 组合键,即可重新键入该单词。此功能称为词语匹配,它的工作方式是,查找以您刚键入的字母开头的单词。Ctrl+K 在源文件中向上查找,而 Ctrl+L 向下查找。

在编写下面所示的 for 循环(迭代访问一组 person)后:

for(Person person : personSet) {

}

您可以将光标放在花括号之间并键入 "pe",然后按 Ctrl+K 组合键。NetBeans 将立即建议单词 "personSet",因为它是以 "pe" 开头的最近单词;第二次按 Ctrl+K 组合键时,NetBeans 将建议 "person",这是第二近的单词。

事实上,在这种特殊情况下,您甚至不需要键入 "pe",只需在循环中按 Ctrl+K 组合键,也会自动键入标识符 "personSet" 和 "person";这种方法之所以奏效是因为,这两个标识符是 NetBeans 在源文件中向上搜索时遇到的前两个单词。不过,如果在循环顶部和光标之间输入了十个单词,仅按 Ctrl+K 组合键将使 NetBeans 依次查找所有这十个单词,并最终建议 "personSet",然后建议 "person"。在这种情况下,先键入 "pe",然后按 Ctrl+K 组合键,可使 NetBeans 跳过不以 "pe" 开头的所有单词。

如果不小心多按了几次 Ctrl+K 组合键,并到达所需的单词前面的单词,只需按几次 Ctrl+L 组合键,NetBeans 将一直移到漏掉的单词。最后,请注意,此功能可以在所有类型的文件中的任意位置使用。事实上,它在 XML 文件中是非常方便的,您可以使用该功能键入文件中已存在的标记的名称。

提示 2:创建标识符宏

编写较长的标识符名称将提高代码的可读性。人们很难记住名为 "i" 的标识符实际标识的是 "Invoice" 类型的实例,而不是 "Iterator" 或 "ItemListener",尤其是在较长的方法中;如果不考虑要键入所有这些字符的话,诸如 "invoice" 之类的名称不失为一种更好的选择。现在,如果我们能够让 NetBeans 替我们编写 "invoice",还有什么理由要选择 "i" 呢?本节介绍了一个具有上述功能的宏。

试想一下,将光标放在下面代码中紧靠 "Invoice" 后面(用 "|" 表示):

public class Order {
	public void setInvoice(Invoice |) {

	}
}

在触发该宏时,NetBeans 使用代码中已存在的类型名称 "Invoice" 自动键入 "invoice"。该宏只是重新键入前一个单词,然后将重新键入的单词的第一个字母更改为小写。现在,在让 NetBeans 键入 "invoice" 单词的第一个实例后,记得使用“提示 1”中介绍的词语匹配功能 (Alt+K) 重新键入标识符。

创建宏是通过下面的 5 个步骤完成的:

  1. 选择 "Tools"(工具)> "Options"(选项)菜单。
  2. 展开 "Editing"(编辑)和 "Editor Settings"(编辑器设置)。
  3. 选择 "Java Editor"(Java 编辑器)。
  4. 在窗口的右半部分中查找名为 "Macros"(宏)的属性,然后单击最右侧的 "..." 按钮。
  5. 添加一个名为 "Type identifier name using previous word" 的新宏,其中包含下面的宏代码(只需从此处进行复制即可):
    selection-previous-word copy-to-clipboard
    caret-next-word " " paste-from-clipboard caret-previous-word
    selection-forward to-lower-case caret-next-word
    

最后,单击 "Macros"(宏)窗口的 "OK"(确定)按钮以将其关闭,但将 "Options"(选项)窗口保持打开 - 您需要使用该窗口为新宏创建快捷键组合:

  1. 单击名为 "Key Bindings"(键绑定)的属性的 "..." 按钮以打开 "Key Bindings"(键绑定)窗口。
  2. 单击“按名称排序”,然后选择按照“宏-Type identifier name using previous word”名称列出的新宏。
  3. 单击 "Add"(添加)按钮以添加 "Alt+N" 快捷键。

在创建宏时,您通常会使用宏录制功能,以便录制鼠标和键盘操作并将其保存为宏。不过,此处显示的宏包含“转换为小写”操作,无法通过鼠标或键盘操作表示该操作,因此,您需要手动添加该操作。

提示 3:创建分配宏

这是我喜欢使用的宏之一!通常,在定义构造函数时,您需要将构造函数的参数值分配给类变量,如以下示例中所示:

public Person(String name, String emailAddress) {
	this.name = name;
	this.emailAddress = emailAddress;
}

如果定义以下宏并将其绑定到 Alt+=,而不是键入 "this.emailAddress = emailAddress;",您可以直接键入 "this.e",然后按 Ctrl+K 组合键以获取 "this.emailAddress",接下来按 Alt+= 组合键以键入剩下的部分。

有关如何创建宏的说明,请参见“提示 2”。下面就是宏代码:

selection-previous-word copy-to-clipboard caret-next-word " = " paste-from-clipboard ";"

在您习惯了使用 Alt+= 宏后,您会发现它比任何其他方法都快。

提示 4:使用缩写

NetBeans 具有范围很广的内置缩写以键入已知单词,甚至是多行代码结构。您可以试着键入 "sout",然后按空格键,这会使 NetBeans 键入一个完整的标准输出语句,即,

System.out.println("|");

NetBeans 不会键入上面所示的 "|" 字符,而是在替换缩写后,IDE 将光标放在该位置。

内置缩写确实可以节省很多时间,但通过定义您自己的定制缩写,您甚至可以从缩写功能中获得更多好处。

要开始使用,一个很好的作法是,查看现有的代码文件并查找常用的代码结构。一个典型的常用代码结构示例可能是,以下方法中包含的 if/throw 结构:

public void remove(int lower, int upper) {
	if(lower < 0)
		throw new IllegalArgumentException(
			"Parameter \"lower\" has to be a " +
			"non-negative number."
		);
}

该方法以一个 guardian 语句开头,它断言第一个参数是合法参数,否则,将抛出 IllegalArgumentException。

由于添加此类 guardian 语句是一种很好的通常做法,您可以添加缩写以使 NetBeans 将其扩展为 if/throw 结构。可通过以下操作实现此目的:

  1. 选择 "Tools"(工具)> "Options"(选项)菜单。
  2. 展开 "Editing"(编辑)、"Editor Settings"(编辑器设置)和 "Java Editor"(Java 编辑器)节点。
  3. 单击包含 "Abbreviations"(缩写)属性的行的 "..." 按钮。
  4. 添加一个名为 "ill" 的缩写,它将扩展为
    if(|)
    	throw new IllegalArgumentException("");
    

请注意,NetBeans 知道使用 "|" 字符是为了指示扩展后的光标放置位置。

现在,尝试键入 "ill",然后按空格键。看看会出现什么结果!

当然啦,您可以创建一个宏以键入完全相同的内容,但缩写有一个突出的优点,就是它们很容易记住,因为您可以指定诸如 "ill" 甚至 "illarg" 之类的名称,而不是使用含混难辨的组合键,如 "Ctrl+Alt+I"。缩写的缺点是,它们无法触发宏,至少目前还不能...

提示 5:使用源代码模板

很多开发者完全忽视了非常易于使用的 NetBeans 模板功能。如果您需要创建很多源文件,而这些文件具有很多相同的特征,则应该定义一个包含这些共同特征的模板。

例如,在很多系统中,您制订了应如何定义异常类的规则,或扩展类 X 的所有类应包含某些方法、变量、文档等的规则。

在编写新的类时,很多开发者往往从空 "Java Class"(Java 类)模板入手,并手工编写所有内容;这通常涉及键入以前编写的代码。您应该查找一个作为良好起点的类,右键单击其树节点,然后选择 "Save As Template..."(另存为模板...)。现在,每当您需要创建类似的类时,您只需右键单击应将新类放置到的包,选择 "New"(新建)> "File/Folder..."(文件/文件夹...)菜单项,然后选择该模板。

通过现有源文件定义模板可能会提供过多的内容,但在定义模板后,您可以定制该模板以删除多余的代码,方法是,选择 "Tools"(工具)> "Options"(选项)菜单项,然后在 "Source Creation and Managent"(源代码创建和管理)下面找到该模板。您只需右键单击其树节点,选择 "Edit"(编辑),编辑该文件,然后保存该文件。

如果您为同事提供一个 API,他们经常需要在其中实现相同的接口,您可以随该 API 提供源模板以帮助他们进行实现。共享模板就像将其从一台计算机复制到下一台计算机一样简单。模板将存储在以下文件夹中:

"... [user home dir]\.netbeans\4.0\config\Templates\[your template folder]"

如果您使用版本控制,强烈建议您创建一组项目模板并通过版本控制系统共享这些模板。

提示 6:有效地编辑 getter 和 setter

如果您手工编写 Java Bean,则可能会在编写和维护琐碎的 getter 和 setter 方法方面浪费大量时间。幸运的是,NetBeans 可以为您生成这两种方法,IDE 甚至还提供了有效维护这些方法的内置机制。从 NetBeans 4.0 起,重构机制支持通过类的变量生成缺省 getter 和 setter 方法。要创建下面所示的 getName 和 setName 方法:

public class Customer {
  private String name;

    public String getName() {
      return name;
    }

    public void setName(String name) {
      this.name = name;
    }
}
		

您只需声明 name 属性,右键单击该属性,然后选择弹出式菜单项 "Refactor..."(重构...)> "Encapsulate Fields..."(封装字段...)。

在生成这些方法后,您可能需要更改 "name" 属性的名称。这可能涉及键入很多内容,因为源文件中的很多地方都会用到单词 "name" 或 "Name"。幸运的是,NetBeans 提供了一项极佳的功能(称为“Bean 模式”),它可以解决该问题。如果在项目树中找到您的类并展开其树节点,NetBeans 将显示一个名为 "Bean Patterns"(Bean 模式)的节点,其中包含该类的每个 Bean 属性的子节点。可通过按 F2 键或右键单击并选择 "Rename..."(重命名...),重命名该节点;如果按这种方式重命名属性,NetBeans 将进行所有必要的更改。

通过使用 Bean 模式功能,您还可以有效地更改属性的类型。如果右键单击属性的树节点并选择弹出式菜单项 "Properties"(属性),则会打开一个窗口,其中包含有关该属性的信息。您可以在其中更改类型,NetBeans 将相应地更改源代码。

提示 7:使用 "Fix Imports"(修复导入)工具

简而言之,请勿编写 import 语句。NetBeans 4.0 引入了一个非常强大的功能(称为“修复导入”),可通过 Alt+Shift+F 组合键进行访问。该功能分析源代码并查找尚未导入的类名。如果尚未导入类 X,并且整个项目中只有一个名为 X 的类,NetBeans 将自动导入该类。如果两个不同的包中均包含名为 X 的类,NetBeans 将显示一个对话框,询问您要导入哪个类。“修复导入”的效果非常好,并且它自动删除不再使用的导入。

小结

通过使用这些提示,您很快就会发现可以在更短的时间内生成更好的代码,并且减少了语法错误。此外,如果您像很多开发者那样开发需要编写大量代码的项目,而最终弄得指尖疼痛,让 NetBeans 替您编写代码无疑是理想之选。

您越是根据项目的特定需求定制 IDE,实现您的系统的速度就会越快。NetBeans 4.0 就像一辆完美的赛车 - 不仅速度飞快,而且驾驶起来乐趣多多。但就像赛车需要改装一样,NetBeans 也需要进行优化。请根据项目的特定需求定制缩写、宏和模板以优化 IDE,充分发掘 NetBeans 4.0 的潜力!

作者简介

是丹麦的一家软件公司 ROCK IT 的创始人,他负责研发的开创性、全 Java、面向组件的内容管理系统 Puls 就是完全使用 NetBeans(将于 2005 年春季发布)开发的。