CodeGym /Java 博客 /随机的 /IntelliJ IDEA:编码风格和代码格式
John Squirrels
第 41 级
San Francisco

IntelliJ IDEA:编码风格和代码格式

已在 随机的 群组中发布
编程语言与口头语言非常相似。唯一不同的是,它是一种特殊的语言,其主要目的是促进与计算机的交流,以便向计算机解释我们想让它做什么。但是你无法与计算机进行个人对话。当您开始学习编程语言时,您会查看书籍或一些教育资源,例如 CodeGym。此资源向您展示了计算机可以理解的代码。但是您在学习 Java 语言时也应该理解它。与任何语言一样,编程中采用了一些格式约定。例如,在礼貌的社会中,这样写会被认为是不礼貌的。在 Java 中,方法名称以大写字母开头是对编码约定的严重违反。 IntelliJ IDEA:编码风格和代码格式 - 1Java 代码的规则在Java 编程语言的代码约定文档中给出。编码约定还可以规范较小的细节,例如缩进。想象一下,如果缩进不一致,版本控制将变成一场彻头彻尾的噩梦,一些人使用制表符而另一些人使用空格。对于需要仅通过一种方法签入修复程序但发现整个文件由于空格和制表符的差异而发生更改的人来说会是什么样子?当然,与普通语言一样,惯例可能会根据语言的使用位置而改变。例如,在浩瀚的网络中,您可以找到Google Java Style GuideTwitter Java Style Guide. 对于这次审查,我们需要一个测试对象。我们将使用 Gradle 构建自动化系统。它将让我们通过从模板创建一个新项目来快速开始。Gradle 有一个很棒的插件:Build Init Plugin。让我们转到一个新目录并在那里运行以下命令: gradle init --type java-application 之后,启动 IntelliJ IDEA。如果您看到一个带有打开项目的窗口(即您看到代码编辑器和项目树),请使用 关闭该项目File -> Close Project。现在在欢迎窗口中,运行“ Import Project”并导入我们的新项目。导入时,设置“ Use autoimport”复选框。让我们弄清楚我们是否可以使用最先进的开发工具以某种方式简化生活。

IDEA 中的代码格式化

导入项目后,按 Ctrl+N 并转到班级AppTest。这是默认的测试类。它看起来像这样:

 import org.junit.Test;
 import static org.junit.Assert.*;
 
 public class AppTest {
     @Test public void testAppHasAGreeting() {
         App classUnderTest = new App();
         assertNotNull("app should have a greeting", classUnderTest.getGreeting());
     }
 }
是什么立刻吸引了你的眼球?和方法声明在同一行的注释,看起来很难看吧?如何解决这个问题?IntelliJ IDEA 有一个Code用于各种代码操作的“”菜单项。一种这样的操作是“ Reformat Code”,您可以使用 Ctrl+L 应用它。这样做之后,注释将在一行,而方法声明在另一行。立即值得注意的是,此操作是在当前选择的代码上执行的。如果没有选择,则对所有内容执行格式化操作。现在让我们添加一个新的测试方法:

 @Test
 public void testSumOfOddNumbers() {
 	List<Integer> data = Arrays.asList(1, 4, 2, 3, 6, 7, 9);
 	Integer result = data.stream().filter(number -> number % 2 == 0).reduce((n1, n2) -> n1 + n2).get();
 	assertThat(result, is(12));
 }
和两个进口:

import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
如您所见,对 Stream 的操作在一行上。但是,如果我们想确保链式方法调用在每个周期运算符处始终拆分为新行怎么办?我们可以手动执行此操作。但请记住,我们希望一切自动发生。事实上,我们肯定会不时忘记手动步骤,然后我们最终会在各处使用不同的格式,这可不好。所以我们需要编辑 IDEA 用于格式化的规则。选择File -> Settings在 IDEA 菜单中(或按 Ctrl+Alt+S)。在设置窗口的搜索字段中输入“代码样式”。在“代码风格”部分,您可以为更多语言指定设置,而不仅仅是 Java。但 Java 是我们现在感兴趣的。如您所见,设置分为几个选项卡。一个超级有用的功能是窗口右侧显示了一个操作示例: IntelliJ IDEA:编码风格和代码格式 - 2屏幕截图显示我们可以将“链式方法调用”设置为“始终包装”,即始终将链式方法调用拆分为单独的行。现在在测试类中再次点击格式化按钮,我们看到它真的起作用了!但有时您需要在标准格式化规则之外格式化一些代码。设置格式如下: IntelliJ IDEA:编码风格和代码格式 - 3为了防止格式化,在“代码风格”部分,启用格式化程序标记: IntelliJ IDEA:编码风格和代码格式 - 4现在我们可以更改我们的测试类,这样它的代码就不会被重新格式化:

 @Test
 public void testSumOfOddNumbers() {
 	List<Integer> data = Arrays.asList(1, 4, 2, 3, 6, 7, 9);
 	// @formatter:off
 	Integer result = data.stream().filter(number -> number % 2 == 0)
                              .reduce((n1, n2) -> n1 + n2)
                              .get();
 	assertThat(result, is(12));
 	// @formatter:on
 }
您可能已经注意到,当您按下 Tab 键时,IDEA 将其解释为一个空格(这是默认行为)。但是您可以在“”部分更改它Code StyleIntelliJ IDEA:编码风格和代码格式 - 5如您所见,那里有很多设置。您可以在此处阅读有关“”设置的更多详细信息Code style:“ IDEA 帮助:代码样式”。还有另一个重要的格式化功能:格式化导入。此操作单独运行,称为“ Optimize Imports”。它位于Code -> Optimize Imports(Ctrl+Alt+O) 下。优化导入删除不必要的导入,并根据Java 设置的Imports“”选项卡中的设置以正确的顺序排列导入。Code Style更重要的是,如果您希望自动进行这种格式化,那么有个好消息:保存动作插件。

在命令中分发设置

我们在上面看到,您可以随心所欲地自定义格式样式。但是你如何在团队中使用这种风格呢?非常简单地。有几种选择。最简单的就是保存一个代码风格方案。File -> Settings使用(或按 Ctrl+Alt+S)打开 IDEA 设置。在“ Code Style”部分,我们可以看到“Scheme”。这是我们的格式化方案。默认情况下,使用“默认”方案并标记为“IDE”,这意味着此设置仅适用于我们的 IDE——它不会影响任何其他人。要制作“自定义”方案,请使用右侧的按钮制作副本并为其命名,例如:CodeGym IntelliJ IDEA:编码风格和代码格式 - 6然后我们可以导入或导出设置: IntelliJ IDEA:编码风格和代码格式 - 7 另一种选择是导入 IDEA 设置: IntelliJ IDEA:编码风格和代码格式 - 8第三个选项是设置存储库。要使用 Settings Repository,请参阅以下链接中的 IntelliJ IDEA 帮助文档以获取更多详细信息:“ Settings Repository ”。说到在团队中推动统一样式,我也不得不提到 Eclipse 对样式的良好支持IDE。为此,您需要安装一个单独的插件:通过“文件”->“设置”(Ctrl+Alt+S) 打开 IDEA 设置,然后转到“插件”部分。要查找新插件,请单击“”按钮。Browse Repositories然后在搜索窗口中找到 Eclipse Code Formatter 插件。 IntelliJ IDEA:编码风格和代码格式 - 9安装后,您必须重新启动 IDEA——这是标准程序。现在一切都完成了。IDEA 设置中有一个新部分:“Eclipse Code Formatter”。. 它看起来像这样: IntelliJ IDEA:编码风格和代码格式 - 10

更严格的要求

除了 IDEA 工具,您还可以使用构建自动化插件来收紧需求。您无法手动检查某人是否使用了正确的格式。也许你可以和 5 个人组成一个团队。但是对于 100 人的公司来说,这是不现实的。甚至五个也很难追踪。为什么要浪费你的时间呢?如果违反规则,阻止项目建设会容易得多。事实上,这是一个完全独立的主题,称为“检查代码”。在这篇文章中,我只想向您展示它是如何工作的。最流行的 Gradle 插件之一(因为它构建了我们的项目,你会记得)是pmd. 要启用它,只需转到我们的 Gradle 项目的构建脚本(项目根目录中的 build.gradle 文件)并在其余插件旁边添加 pmd:

 plugins {
     // Apply the java plugin to add support for Java
     id 'java'
     // Check source code
     id 'pmd'
     // Apply the application plugin to add support for building an application
     id 'application'
 }
现在我们可以在同一个地方输入更详细的设置:

 pmd {
     ignoreFailures = false
     pmdTest.enabled = true
     ruleSets = [
             'java-basic',
             'java-braces',
             'java-clone',
             'java-codesize',
             'java-comments',
             'java-controversial',
             'java-coupling',
             'java-design',
             'java-empty',
             'java-finalizers',
             'java-imports',
             'java-optimizations',
             'java-strictexception',
             'java-strings',
             'java-typeresolution',
             'java-unnecessary',
             'java-unusedcode'
     ]
 }
现在连我们的项目都坏了。运行gradle build,我们得到一个错误。好消息是在构建过程中会生成一份报告。如果有错误,我们会收到如下消息:

 BUILD FAILED in 35s
 6 actionable tasks: 6 executed
 7 PMD rule violations were found. See the report at: file:///C:/_study/codestyle/build/reports/pmd/main.html
转到报告,我们看到类似这样的内容: IntelliJ IDEA:编码风格和代码格式 - 11此外,“ Problem”列提供指向 pmd 插件网站上问题描述的链接。例如,对于“ headerCommentRequirement Required”错误,链接位于此处:pmd — CommentRequired。这个错误提示我们的类没有 JavaDoc。我们可以使用模板在类上面配置一个 JavaDoc: IntelliJ IDEA:编码风格和代码格式 - 12并指定内容File HeaderIntelliJ IDEA:编码风格和代码格式 - 13之后,我们可以将 App 类上面的注释变成 JavaDoc,然后在新构建中看到错误消失了。

底线

代码风格对于最大化项目生产力很重要。根据共享规则编写的优美代码可确保您的同事更容易、更快速地理解它,并且不会对您提出一大堆批评。使用现代开发工具,遵守样式规则并不难。我希望这篇评论向您证明这是真的。按照传统,这里有一些关于该主题的额外材料:
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION