竹笋

首页 » 问答 » 环境 » 收藏这些IDE使用技巧,你都知道吗阿
TUhjnbcbe - 2025/1/28 4:07:00

简介:欲善其事,先利其器。对于研发同学,在日常的开发工作中,我们与之打交道最多的便是编程的IDE。能否高效和灵活的使用IDE,将对我们的工作效率起着举足轻重的作用。

一、背景

1、目的

欲善其事,先利其器。对于研发同学,在日常的开发工作中,我们与之打交道最多的便是编程的IDE。能否高效和灵活的使用IDE,将对我们的工作效率起着举足轻重的作用。

研发同学在开发中最主要做的两件事分别是架构设计和编码,前者主要取决于大量的项目经验积累和个人的思考深度,也是作为研发的核心竞争力,短时间内很难快速求成;后者主要取决于日常的编码练习和一定程度的IDE信息差,能够通过下文中介绍的一系列技巧进行能力的快速补齐和巩固加强。

本文的主要目的有两方面:

一方面,对IDE的快捷操作和高效技巧,结合自己多年的实践和理解,进行一次系统性的总结和梳理。另一方面,希望通过本文系统性的梳理,能够帮助更多的同学提高研发效率,无论你是刚入手不久的新人,还是有着多年开发经验的专家,相信你都能够在本文中发现一片新天地,让你能够有更多的时间和精力去做更有意义的事情。2、定位

网上很多技术网站和个人博客,对于IDE各种技巧和便捷操作总结得非常具体且详细,对于单点的详尽程度都是极具参考和学习价值的。但其对应的问题是,这些很多很优秀的文章,出自于不同的手笔,有各自的行文风格,且分散在各个网站的散点,难以系统化。

我对本文的定位是,将各种技巧以大分类的形式进行收拢和聚合,以帮助大家构建和完善整体的知识体系,大幅度提高开发效率。对于每个分类点到即止,替代咀嚼式灌输方式的是,尽量使用渐进式引导的方式。

3、普适性

JetBrains系列的IDE产品众多,除了下图之外,还有其他未列入的,如Google二次开发的AndroidStudio等。虽然归为多个产品实例,但这些IDE的内核都是一样的,只是在内核的基础上额外添加了各自的语言特性。本文将以使用量最高的一款IDE——IDEA为例进行展开,文中提到的绝大多数能力和技巧,在其他IDE均同样适用,一通则百通。

二、PostfixCompletion

1、介绍

PostfixCompletion(下称Postfix)是一种通过.+模板Key来对当前已经输出的表达式,添加和应用预设代码模板的编码增强能力。

其核心要解决的问题是,将编码过程中一些通用的代码结构范式进行抽象和沉淀,并能在同类型的场景下,通过.+模板Key的方式进行唤醒和复用。

举个例子,现在需要完成下面一段代码的编写,为了对name参数进行判空保护:

if(name!=null){}在普通文本编辑器中,其中if2次,name4次,(){}!=共6次,再加空格Tab和光标切换,一共需要按键23次。

在IDEA编辑器中,不使用Postfix时,一共需要按键20次,不考虑代码格式化的情况可以减少到16次。

在IDEA编辑器中,使用Postfix时,只需要8次,如下图:

在这个例子中,可以对比出使用Postfix前后的效果,使用之后在编码中减少了一半的手动按键操作,且生成的代码是自带格式化的。在实际的编码过程中,各项目大小和复杂度差异性虽然很大,但细化到这种基本单位的编程范式时,它们都是融会贯通的。

与上例中nn并列的Postfix,IDEA给我们预设的还有很多,下面对一些非常高频使用的Postfix进行梳理。

2、梳理

var

快速定义一个局部变量,自带IDE的类型推断

notnull

快速进行NPE的判空保护:

nn

同notnull,是它的简写,推荐用这个,更加便捷:

trycatch

快速对当前语句添加trycatch异常捕获,同时IDE还会对catch中的Exception自动做类型推断:

cast

快速实现类型强转,不需要反复使用()包裹和光标切换;配合instanceof使用时还能自动实现cast类型的推断:

if

快速实现if判断的代码范式:

throw

快速实现抛异常:

for

快速实现集合或数组的迭代:

fori

快速实现集合或数组的带索引值迭代;同时对整型数字也支持:

sout/soutv

快速实现(不带参数/带参数)的打印功能:

return

快速实现方法中的值返回逻辑:

format

快速实现字符串格式化:

3、高级用法

担心系统预设的Postfix不足以满足我们的编码需求,IDEA还提供了Postfix的自定义功能。

这里我以自定义一个对集合判空的代码范式,来举例说明自定义Postfix的流程:

1)进入IDE设置界面,然后依次进入Editor=General=PostfixCompletion=面板左下角加号=Java:

2)在弹起的页面中,按照下图进行配置,然后保存退出设置页。

此时我们自定义的isempty这个Postfix即完成了,下面来看下实际使用的效果:

在实际开发过程中,对于根据已经输入的表达式就能决定接下来代码格式的功能,我们都能使用这种自定义方式进行代码的抽象和复用。

接下来介绍IDE中一种跟Postfix功能很相像,但灵活度更高的能力——LiveTemplate。

三、LiveTemplate

1、介绍

介绍之前可以先看一段简短的编码过程:

上面这段编码中,我先后使用了LiveTemplate的以下三个模板能力:

psfs:定义字符串常量main:添加入口函数sout:实现日志输出这里我们将其和上面提到的Postfix对比来看,两者都是提供代码级别模板的功能。不同的是,Postfix需要一个已经输入的表达式和.+模板Key来进行触发,而LiveTemplate不需要这些,它仅仅需要模板Key即可触发。

LiveTemplate提供的预设模板要比Postfix要高出一个数量级,因此这里我就不进行一一演示,我们可以进行设置面板,然后按照Editor=LiveTemplates的路径自行查看,如下图:

2、高级用法

和Postfix一样,LiveTemplate也支持自定义模板,但它的自定义模板相对来说更加灵活和开放,甚至支持我们直接植入脚本。鉴于LiveTemplate的高度灵活性,单独介绍这块会占据大量的篇幅,因此这里我将从几个实际的案例场景来开拓一下思路,而具体自定义拓展过程就不详细展开介绍了。

Key值映射

将DB中查询到List结构的数据,根据Key值映射转化为MapK,T结构的数据,以便于进行后续的数据填充逻辑:

DB批量查询

在数据查询时,我们会有根据ID主键进行批量DB数据查询的诉求,如下:

ListUserusers=userMapper.queryUserByIds(userIds);这种写法会有一个弊端,就是当userIds大到一定的量级时,该查询会变得非常耗时。

对于该问题其中一个解法是,将这个大的userIds拆分成多个批次,然后让这多个批次异步并行去查询。这里便使用LiveTemplate来抽取一个针对该场景的代码模板,如下:

按照该模板,我们的查询语句将变成这样:

ListUserusers=batchQuery(userIds,,userMapper::queryUserByIds,null);可以看到,和之前相比,多传一个分批的size参数,同时还支持指定的异步任务调度器的自定义配置,而返回结果和之前的查询方式保持完全一致,不需要外部有额外的适配工作。

脚本植入

这个功能是我非常看好LiveTemplate的主要原因,它的灵活性和拓展性也主要来源于这里。它支持我们通过一个模板Key来唤起和执行一段脚本,这也就意味着,我们的自定义的LiveTemplate模板是可编程的,极大程度提高了该模板的拓展性。

单描述功能会有些空洞,这里我结合一个实际案例进行介绍,我们来实现一个跨电脑的代码共享功能:

1)首先,使用python的flask框架写一个极简的服务端应用并启动,提供最简单的push和pull的能力,如下:

fromflaskimportFlask,requestDEFAULT=nothingcode=DEFAULTapp=Flask(__name__)

app.route(/push)defpush():globalcodecode=request.args.get(code,DEFAULT)returnSuccess

app.route(/pull)defpull():returncodeapp.run()2)然后,我们来通过groovy脚本实现一个代码pull的模板,这里应用了LiveTemplate的groovyscript能力,对应脚本如下:

defurl=newURL(

1
查看完整版本: 收藏这些IDE使用技巧,你都知道吗阿