原文地址
现代支持java虚拟机语言例如Kotlin,Groovy,Scala 以及其它的许多语言特性让你写代码以一种更简洁、更有表现力的方式。这些特性包括类型推断,属性,插入字符串,范围和元祖文字,增强操作符,闭包,隐喻,智能类型转换等。甚至过去总是非常保守的语言java在version8引入lambda语法让代码不要那么啰嗦。
在java8之前Intellj IDEA 已经用它的折叠功能去模仿lambda语法让代码更具可读性:
如果你展开被折叠的代码,你将会看到如下代码:
如果你用java7或之前的版本。 IntelliJ IDEA 依然这样折叠代码为了更好的阅读性。
因为我个人是Kotlin的粉丝,但是每天必须写一大堆java代码。所以我决定去扩展IDE的折叠功能区模仿一些现代的语言特性帮助解决冗长的代码。因此我制作了一个 IntelliJ IDEA 的插件。我在这边博客里简要的介绍一些最有趣的特性。
插入字符串
看这个例子:
如果java提供插入字符串,它看起来像这样。
这个插件通过折叠模仿的非常像,当一个插入字符串包含表达式:
注意,折叠不会打乱语法高亮和代码导航。
字符串拼接
现在看这个例子:
如果我们用隐式转换和增强字符串的概念。我们将会得到如下代码:
依然很清晰但是更简洁和更具可读性。
字符串和列表的切割操作:
现在看这个例子:
这里我们请求了一个子字符串根据字符串的长度。假如java提供Python提供的字符串切割操作?如果你开启了插件里的相应选项,你将会在代码里得到如下模仿功能:
变量声明
现在看这个例子:
这里我们用int变量来保存state,当你读代码的时候,类型并不总是像语义一样重要。因为所有的变量是可变的。
假如java有类型推断,并且所有的开发者总是使用合理的使用final。这听起来有些理论但是IDE能够模仿这个特性通过折叠和数据流分析:
关于循环
现在看这个例子,我们遍历一个集合并且访问它的item和index:
如果Java支持元组我们的代码将会变的更具可读性:
如果和上图的折叠一起使用,将会更清晰:
让我们看另一个例子,遍历一个数组但是不访问它的items:
如果Java支持range literals,上图能以一种更简洁的方式么?至少插件让它成为了可能:
Equals and compareTo
现在我们看这个例子:
这是Java强制我们去写的由于指示性的相等。如果Java使用了结构性的相等操作符,这将会使代码更短和清晰:
同样的方法适用于不相等:
那么关于compareTo呢?
如果Java支持增强操作符,我们可以简化成这样:
属性
现在看看下面的代码,看起来似曾相识,难道不是吗?
这种语法特别啰嗦,每个属性用getter和setter去访问。
假如Java像Kotlin的方式去访问属性值呢?
这将更具可读性且减少30%的代码。如果你更喜欢这种方式,你可以开启插件里的相应选项。当然,对于setters也一样适用:
Collections
如果Java支持增强操作符并且集合提供add、addAll、remove、removeAll方法?看下面这些代码:
插件将会模仿这些操作符让语义更清晰:
另一个例子:
如果list有first()和last()方法(举例来说:像其他JVM语言那样)?
这样是不是更具可读性?
Smart casts
想象一下当我们检查一个实例是否是某种对象的类型的时候:
如果Java支持smart casts 像Kotlin,我们将会有更清晰,更简洁的代码:
Safe calls
看这个例子:
我们用Java的elvis 表达式去检查是否为空。我们是否能够模仿Groovy和Scala提供的safe calls使它更具表达力呢?
注意:所以上面提及的折叠方式在插件中都是可选的,如果你决定尝试一下,请安装这个插件。同时我非常欢迎收到你对问题的反馈。
Bug 和需求可以反馈到这里。
Develop with Pleasure!