JavaRush /Java 博客 /Random-ZH /IntelliJ IDEA:代码风格和格式
Viacheslav
第 3 级

IntelliJ IDEA:代码风格和格式

已在 Random-ZH 群组中发布
现代工具使开发过程变得更加容易。特别是,可以更轻松地监视代码的风格,尝试最大程度地减少其“未经授权”的格式。在这篇评论中,我建议您熟悉一下 IntelliJ Idea IDE 为开发人员提供了哪些工具,以使代码易于阅读且易于理解。
IntelliJ IDEA:代码风格和格式 - 1

介绍

编程语言与人们所说的语言非常相似。唯一的区别是,这是一种特殊的语言,最初用于与计算机进行通信,以便向计算机解释我们想要从中得到什么。但不可能与计算机进行一对一的交流。即使当您开始学习编程语言时,您也会查看一本书或一些教育资源,例如 JavaRush。在此源代码中,您看到了计算机能够理解的代码。但当您了解 Java 语言时,您也应该理解它。与任何语言一样,编程也有一些形成代码的规则。例如,在文明社会中用栅栏书写被认为是不礼貌的行为,而在Java中用大写字母调用方法是对代码风格的严重违反。Java 代码的格式化规则在Java 代码约定文档中制定。此外,代码风格可以调节更小的细节,例如缩进。当使用版本控制工具时,想象一下当每个人都保存缩进为制表符或缩进为空格的文件时整个噩梦。对于只需要用一种方法检查编辑情况的人来说,但由于将空格更正为制表符,整个文件将被更改,反之亦然,这会是什么样子。当然,与普通语言一样,风格可能会根据使用地点的不同而有所不同。例如,在 Internet 上您可以找到Google Java 样式指南Twitter Java 样式指南。对于这篇评论文章,我们需要一个测试对象。让我们使用 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 testSummOfOddNumbers() {
	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(或单击Ctrl + Alt + S)。在设置窗口的搜索字段中,输入“代码样式”。在“代码样式”部分中,不仅可以指定 Java 的设置。但现在我们对 Java 感兴趣。如您所见,设置分为几个选项卡。最有用的是更改的结果将显示在窗口右侧的示例中:
IntelliJ IDEA:代码样式和格式 - 2
正如您在屏幕截图中看到的,我们可以将“链式方法调用”的设置指定为“wrap always”,即 始终拆分合并方法调用。现在我们再测试一下按格式化,看看是否真的有效!但有时需要在一般格式化规则之外对某些代码进行格式化。让我们按如下方式设置格式:
IntelliJ IDEA:代码样式和格式 - 3
要禁用格式设置,必须在“代码样式”部分中启用对禁用格式标记的支持:
IntelliJ IDEA:代码样式和格式 - 4
现在我们可以更改测试代码,使其格式保持我们编写时的格式:
@Test
public void testSummOfOddNumbers() {
	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 会将其解释为您的空格(默认行为)。但您可以在代码样式中更改此设置:
IntelliJ IDEA:代码样式和格式 - 5
正如您所看到的,有各种各样的设置。您可以在此处阅读有关代码样式设置的更多信息:“ Idea 帮助:代码样式”。还有另一个重要的格式化功能 - 导入格式。它是单独执行的,被调用"Optimize Imports"并位于菜单项中Code -> Optimize Imports(Ctrl + Alt + O)。导入优化会删除不必要的导入,并根据“Java 代码样式”设置的“导入”选项卡中的设置将它们放置在正确的顺序中。另外,如果您希望自动进行格式化,好消息是您可以使用“保存操作”插件来完成此操作。

将设置分发给团队

太好了,我们在上面看到我们可以自定义格式样式以适合我们。但这种风格如何运用在团队中呢?很简单。有几种选择。最简单的一种是保存图表。通过文件 -> 设置(或按 Ctrl + Alt + S)打开 Idea 设置。在“代码样式”部分我们可以看到“Scheme”字样。这是我们的格式化方案。默认情况下,使用名称 Default 指定一个方案,旁边是注释 IDE:这意味着此设置仅适用于我们的 IDE,不会影响任何人。要制作“自定义”方案,请单击右侧的按钮进行“复制”并为其命名,例如:JavaRush
IntelliJ IDEA:代码样式和格式 - 6
之后我们将能够导入或导出设置:
IntelliJ IDEA:代码样式和格式 - 7
另一种选择是导入 Idea 设置:
IntelliJ IDEA:代码样式和格式 - 8
第三个选项是设置存储库。有关使用设置存储库的更多信息,请参阅文档“IntelliJ Idea 帮助:设置存储库”。关于在团队中分发单一样式的主题,我也忍不住注意到 Eclipse IDE 对样式的良好支持。为此,您需要安装一个单独的插件:通过文件 -> 设置(Ctrl + Alt + S)打开 Idea 设置,然后转到插件部分。要搜索新插件,请单击 按钮"Browse Repositories",之后我们将在搜索窗口中找到 Eclipse Code Formatter 插件。
IntelliJ IDEA:代码样式和格式 - 9
现在,安装后,您需要重新启动 Idea - 这是标准过程。之后,在同一个地方,在 Idea 设置中,我们会发现一个新部分:“Eclipse Code Formatter”。可以在此处找到Eclipse 格式文件的示例。它看起来像这样:
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
此外,在“问题”列中,有一个指向 pmd 插件网站上的问题描述的链接。例如,对于错误“headerCommentRequirement required”,链接位于:pmd - CommentRequired。这个错误提示我们我们的类没有 JavaDoc。可以使用模板配置 JavaDoc 在类上的存在:
IntelliJ IDEA:代码样式和格式 - 12
并指定文件头的内容:
IntelliJ IDEA:代码样式和格式 - 13
之后,我们可以将 App 类上面的注释转换为 JavaDoc,并在新的 Build 中看到错误已经消失。

底线

代码风格对于高效的项目非常重要。按照通用规则写出的漂亮代码是你的同事会更容易、更快速地理解它的保证,并且不会说几句关于你的情话。有了现代的开发工具,遵守规则并不是那么困难。我希望这篇评论表明情况确实如此。好吧,像往常一样,关于这个主题的一些材料: #维亚切斯拉夫
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION