原文地址:https://dzone.com/articles/7-tips-to-write-better-java-code-you-should-know-1[1]
(本文对原文做了部分修改和一点补充)
在每一位刚入行的程序员的心中,编写程序都是一门神圣的艺术创作。他们无不希望自己的代码作品既简洁清晰,又可读性强,而且还具有一定的容错能力。本文将为您带来八点建议和技巧,以帮助您编写出简洁、干练的 Java 代码。其中的有些可能会让你觉得有些不可思议,但是请相信我,如下的每一条我都亲身实践过的。
虽然我已经使用了六年的 Eclipse 和三年的 NetBeans,而且我仍然偶尔会使用到它们,但是如今的大部分时间,我只使用 IntelliJ IDEA。我并不是想在这里展开有关 IDE 的大讨论,而只是想告诉您,IDEA 能够根据其自有的最佳整合实践标准,持续提示您写出更短、更好、更简洁的代码。
您只需要按下 Alt + Enter 组合键,它就会自动开始为您工作了。在大多数时候,IntelliJ IDEA 能够为您提供各种智能且实用的代码建议。当然,您也可以向它学到不同的编程知识与技巧。
另外,推荐使用 IDEA 的快捷键来加快编码速度, IDEA 有很多非常方便的快捷键和功能,用的多了自然就熟悉了!
为了更好地获取 IDEA 的服务性能,您最好在自己的电脑上采用固态硬盘 (SSD)。就我自己的那台旧式笔记本电脑而言,由于使用的是传统硬盘 (HDD),它已无法顺畅地运行 IDEA 了。因此我个人建议您至少使用一颗 256 GB 大小的固态硬盘。
JDK 8 及其更高版本引入了诸如:lambda 表达式 (lambda expression,一种匿名函数)、功能接口、流式接口 (Stream APIs,提供更为可读的源代码实现方法) 等许多新的功能,这些都有助于您写出更简短、更高性能的 Java 代码。
当然,您并不需要去逐一地记住这些功能,因为前面提到的 IDEA 会帮助您在实际编程的过程中,实现这些功能与服务。这也就是为什么我首先向您建议使用 IDEA 的原因。
如果你对 Java8 新特性还不了解的话,可以查看 Java 入门教程:https://github.com/Snailclimb/JavaGuide/blob/master/docs/java/What's%20New%20in%20JDK8/Java8Tutorial.md[2] ;
如果你想深入 Java8 新特性,我可以推荐你一些不错的学习资源:
https://github.com/Snailclimb/JavaGuide/blob/master/docs/java/What's%20New%20in%20JDK8/Java8%E6%95%99%E7%A8%8B%E6%8E%A8%E8%8D%90.md[3]
请使用 Maven(一个采用纯 Java 编写的开源项目管理工具,请参见) 或 Gradle(一个基于 Apache Ant 和 Maven 的项目自动化构建工具,请参见) 来管理代码中的依赖关系,以及构建和部署自己的项目。
大部分 Java 后端开发人员都用的是 Maven,或许是因为几乎所有 Java 开发者都熟悉 XML。下面我们来看看 Maven 能为我们做什么。
Maven 能为我们做什么?
•我们可以使用 maven 轻松构建项目。•我们可以使用 maven 的帮助轻松添加项目的 jar 和其他依赖项。•Maven 提供项目信息(日志文档,依赖列表,单元测试报告等)•在更新 JAR 和其他依赖项的中央存储库时,Maven 对项目非常有帮助。•在 Maven 的帮助下,我们可以将任意数量的项目构建为输出类型,如 JAR,WAR 等,而无需执行任何脚本编写。•使用 Maven,我们可以轻松地将我们的项目与源代码控制系统(例如 Subversion 或 Git)集成。
是时候向setter/getter
、ashcode/equals
、以及constructors/toString
等样板式代码 (boilerplate code) 说再见了,您只需要一个注解: @Data
就能统统搞定了。
Lombok 是一款可以通过简单的注解形式,来帮助开发者简化并消除 Java 代码臃肿的工具 (具体请参见)。它不但能够减少您的代码编写量,还能够帮助您打理那些生成的字节码。
可测试的代码通常意味着在组织结构上具有更合理、更简洁的代码质量。因为它会驱使您去事先管理好各个类之间的关系、各种方法的访问级别、以及其他方面。我甚至发现:即使是最小的单元测试也能够促进更快、更便捷的开发进程,进而能够让自己写出更加短、平、快的 Java 代码。
当然在现实开发工作中,您总会听到一些诸如“我根本没有时间来编写单元测试”或“项目时间节点将至,不要浪费时间些单元测试了”之类的反对意见。这些听起来貌似很合理,但是根据我的经验,在多数情况下,事实并非如此。
如果您没有时间去编写单元测试,那您是否有更多的时间,去修复代码中那些可见、或不可见的 bug 呢?如果跳过了单元测试,那些仓促完成的代码将无法保证稳定性。特别对于一些新的代码变更而言,您完全无法通过及时的反馈途径,知晓那些新产生的代码是否存在着错误隐患,是否会在将来运行的某个特定场景中产生不可预知的异常问题。
一般而言,Junit 和 TestNG 是两款非常优秀的 Java 应用、及单元测试框架。而我个人则更喜欢使用 TestNG。
简洁干练的 Java 程序代码从来不是一蹴而就的,它往往需要您进行反复地琢磨与改进。通过逐行进行代码重构、和运行各种测试用例,您可以确保自己的更改不会破坏既有代码的正确功能。
同样,IDEA 极大地提供了对于代码重构的支持,其中包括提取方法 (extract method,将某个大的函数拆分为多个小函数)、重命名、内联 (inline) 等功能。
当然,如果您对代码重构是什么,以及它的作用不太了解的话,Martin Fowler 的经典著作《重构:改善既有代码的设计 (第 2 版),Refactoring: Improving the Design of Existing Code (2nd Edition)》绝对是一本您必备的参考书。
从学习编程的第一天起就要养成不错的编码习惯,包、类、方法的命名这些是最基本的。
最后一点,可能也是最重要的:客户花钱让您通过编写代码,来解决他们的问题、满足他们的需求、并解决他们的痛点。然而,您可能在不知不觉中花费了太多的时间,去实现自以为重要、却对客户无关紧要的特殊功能,进而忽略了代码整体的健壮性和可维护性。那么,我们怎么才能够尽早地发现该问题呢?请保持与客户经常联系,以尽早地获取他们的反馈。
话说回来,知易行难,即使是富有经验的产品经理也不一定能在较短的时间内领悟需求的真谛,何况是那些满脑子只注重功能实现的“码农”们呢?
因此,一个实用的建议是:如果您不能直接联络到最终用户的话,请尽量与该系统的产品经理、或运维人员进行礼貌、且频繁的沟通。磨刀不误砍柴工,这些时间的投入对于后期时间的节省是绝对值得的。