没错,当你读完本文,就可以按照我介绍的七个技巧与窍门编写出简洁、整齐的 Java 代码。它们中的一些可能性会让你感到惊讶。
但是请相信我,它们通过了实践的验证——至少在我这里。
1. 使用 IntelliJ IDEA 作为你的 IDE
我持续使用 Eclipse IDE已经近6年,另外 NetBeans 3年。我有时仍然使用它们,但是大多数的时间我只用 IntelliJ IDE。
我不想在这里展示 IDE 或者编辑器的圣战,但我想告诉你,IDEA 会提醒你基于其集成的最佳实践,以便让我们编写更简短、更好、更清晰的代码。我们只需要按下 ALT + Enter,它将为你完成工作。在大多数时间里,InterlliJ IDEA 为你提供智能和实用的建议;你还可以从中获得各种各样新的信息。
为了更好的使用 IDE,最好使用 SSD硬盘,至少我这么做了——我的另一台旧笔记本电脑就无法流畅的运行 IDE。其实很简单,只需要一个 256G 的 Samsung SSD 就可以让你的生活很美好。如果你还在使用 HDD,这笔投资是绝对值得的。
2. 使用 JDK 8 或更高版本
从 JDK 8 以及 更高版本开始,引进许多新功能可以让你编写更简短、更具表现力的代码,包括 lambda 表达式、functional 接口、Stream API等。你实际上并不需要记住它们,IDE 会帮助你使用这些函数,这也是你应该使用 IDE 的另一个好处。另外,《Java 8 in Action》 一书对你也会有所帮助。
3. 使用 Maven/Gradle
为我们的项目使用 Maven 或 Gradle 来管理依赖、构建与部署。若你已经构建了许多基础库并在许多项目中重用,如果这些库仅在内部使用,这最好引入 Nexus。否则,你应该将它们部署到 Maven 中央存储库。
4. 使用 Lombok
与 setter/getter、hashcode/equals 以及 constructors/toString 这样的模板代码说再见。你只需要一个注解——
@Data
——就可以开始工作。Lombok 能减少你编写的代码,但是它依然会处理生成的字节码。
5. 编写单元测试
What?你是认真的吗?!
没错。经过单元测试后的代码通常组织的更好、更清晰,因为它促使你要把类的关系管理好、方法的访问级别以及其它细节内容。我发现即便是最小的单元测试也会使开发更快更容易,它总能驱动你编写更简短、更清晰、更优质的代码。
但是,你总会听到反面的言论,比如“我们有时间编写单元测试”或者“在上线日期来临时这是在浪费时间”。这听起来是真的,有时候这也确实是事实。但是大部分时间,从我的经验来看,它肯定不是上面所说的那样。
如果你没有时间来编写单元测试,你会花费更多时间来修复可见或不可见的 bug,如果没有单元测试的快速反馈,代码的稳定性通常会降低,新的改动一般会减少,有时,你可能需要认真地祈祷,因为真的不知道将发生什么或将引入多少个新的 bug。
可能一些天才程序员可以写出不需要单元测试而没有 bug 的代码。但是我不是,你可能也不是。所以去做吧——请相信我。
JUnit 和 TestNG 做单元测试工作都能做得很好,它们的一些重要功能:
1. 易于设置和运行。
2. 支持注释。
3. 允许忽略或分组并一起执行某些测试。
4. 支持参数化测试,即通过在运行时指定不同的值来运行单元测试。
5. 通过与构建工具,如Ant,Maven和Gradle集成来支持自动化的测试执行。
不过我更喜欢 TestNG。
6. 重构:勤而缓
更短、更简洁的代码不能一次完成,它需要我们反复改进。一点一点的重构并运行测试用例以确保你的更改不会破坏代码的正确行为,事情也会变得越来越好。
在此处,IDE 提供了很好的重构支持,比如提取方法、重命名、内联等特性。
如果你不知道什么是重构并想要了解更多,Martin Flower 的一本书 《重构:改善既有代码的设计》 值得你一读。
7. 定期拜访客户并获得他们的反馈
老实说,这一项应该放在列表的第一位。但在这种情况下,“最好的都在最后”。你编写的代码是为了解决用户的问题,满足需求并消除用户的痛点。有时,你却浪费了太多时间实现不必要的特性和功能。
但是如何能让你早点知道呢?定期与客户保持联系,以便尽早得到他们的反馈。但是这并不像你想象的那么容易,即便是经验丰富的产品经理也无法在短时间内获得信息,甚至比主要关注功能实现的程序员还要少。
给你一个实际的建议,如果无法直接与客户联系,你应该经常与你的产品负责人沟通,清楚且有礼貌的谈谈你的问题,这会节省很多时间。
在过去的多年编程实践和项目应用中,我一直受益于上面七个心得。我希望它们也同样能给您的代码工作带来帮助。
愉快地编码!