Kotlin1.9.0-Beta,它来了!!

大家好,最近看到kotlin官网上放出了kotlin的1.9.0-Beta版,不知道为啥,看到新事物出现就很开心,特地写篇文章简简单单介绍一下。

前提:插件安装

笔者使用IDE为intellij idea2023最新社区版,通过左上角打开File->Settings->Languages & Frameworks -> Kotlin

将最上面的Update Channel更改为Early Access Preview,然后点击右边的Check again,一会下面就会提示kotlin 1.9.0-Beta可以安装了,选择安装即可。

PS:避免使用Intellij idea太旧版本,笔者使用了2021社区版无法检测出kotlin最新插件版本,下面贴一个官网截图以供参考:


接下来我们就来了解下kotlin新版本的一些特性吧。

一. 新操作符..>的支持

该操作符1.7.20引入了实验版本,到了该新版本才变为stable状态。这是一个范围操作符,并且区间属于左闭右开的

我们写一个简单的例子:

fun main() {

    for (i in 0 ..< 10) {
        println("print: $i")

    }



}

看下输出结果:

没有这个新操作符,还记得我们之前用啥实现区间左闭右开的操作吗?是until

fun main() {

    for (i in 0 until 10) {
        println("print: $i")

    }



}

可以看到输出结果和..<一摸一样。官方为啥要提供一个重复的操作符呢,主要就是因为 ..< until更加生动形象、直观的提示程序,这是一个左闭又开的区间,尽可能避免程序犯错

这里顺便说下..<until简单区别

  • until是一个中缀方法

  • ..<是运算符重载函数:

一些场景下,我们可以重写上面的函数,自定义一些实现逻辑,来实现优雅的代码编写。

二. gradle configuration cache将在kotlin多平台支持

gradle生命周期分为三个阶段:初始化、配置( configuration )和执行。在配置阶段,主要是解析各项目下的build.gradle脚本,并构造task任务图。所以,如果能开启配置阶段缓存,可以提升我们项目的编译效率,降低项目编译时间

笔者这里并没有去专门测试,只是做一个说明性的讲解。同时请大家注意,想要支持配置阶段缓存,可能并不是一项简单的工作,项目可能也需要做许多的适配工作,记得之前看文章好像有看到过一些gradle编译阶段添加的监听器将无法被支持等等,具体的适配还请大家去阅读官方文档细细探究。

三. Kotlin/Native下访问常量不再初始化对象

在讲解这个前,我们先了解Kotlin/JVM访问类中常量会导致类被创建初始化吗?看下面一段代码:

    object MyObject {
        init {
            println("side effect!")
        }

        const val y = 1
    }

然后进行第一次调用:

    fun main() {


        println(MyObject.y)
    }

输出的结果为:

然后进行第二次调用:

    fun main() {


        val x = MyObject
        println(x.y)
    }



输出结果为:

通过上面的运行结果可知,Kotlin/JVM访问常量并不会导致类被初始化创建。而在Kotlin/Native下,相同的代码运行结果就不会相同了。

在Kotlin插件版本1.9.0-Beta之前,Kotlin/Native访问常量就会导致类被初始化创建,我们还是拿上面的例子进行讲解。

PS:想要搭建一个简单的Kotlin/Native开发环境,可以参考官方文档:Create a new Kotlin/Native project in IntelliJ IDEA

将下面代码通过Build Project构建成一个exe文件:

输出的exe后缀文件路径在:

进入到该目录并运行./KNTest.ext

可以看到,我们只是访问了MyObject中的常量y,就直接导致MyObject类对象被初始化创建了,这个表现看起来有些糟糕。

所以在Kotlin插件1.9.0-Beta版本,官方对这个进行了优化,Kotlin/Native端访问类中常量,不会再导致类被初始化了,即上面的“side effect!”不会被输出。这样使得Kotlin/Native和Kotlin/JVM的行为保持一致,同时也潜在的对Kotlin/Native一些场景下的性能表现产生积极影响。

四. 新增createParentDirectories()创建父级目录

这个比较简单,就是官方引入了一个新的api:createParentDirectories()该api会检测文件路径的父级目录是否存在,如果不存在就会进行创建

看一个简单的例子:

    fun main() {


        val path = Path("F:\KotlinPlay\test1\test11\test111.txt")
        path.createParentDirectories()
    }



运行上面代码,就会在我的项目下帮我创建test1和test11这两个原本不存在的目录:

请记住,这个api并不会帮助你创建文件,只是会创建不存在的父级目录。

五. K2新编译器的更新

对应Kotlin新编译器笔者了解不多,不过想想最起码会对我们项目的编译效率提升肯定是有帮助的,以及还会支持各种牛逼的特性。

给大家推荐一篇程序员张同学写的一篇文章,能让你对K2编译器有个基本大致的了解:K2 编译器是什么?世界第二高峰又是哪座?

总结

本篇文章主要介绍了kotlin 1.9.0-Beta插件版本新增的一些特性,其实还有几个特性没进行提及,主要是要么没啥介绍的必要,要么我也不懂(比如和iOS相关的特性)。希望本篇文章能对你有所帮助。

历史文章

这里是我整理的过往kotlin特性介绍的历史文章,大家感兴趣可以阅读下:

聊聊Kotlin1.7.0版本提供的一些特性

聊聊kotlin1.5和1.6版本提供的一些新特性

kotlin密封sealed class/interface的迭代之旅

优化@BuilderInference注解,Kotlin高版本下了这些“毒手”!

@JvmDefaultWithCompatibility优化小技巧,了解一下~

参考文章

What’s new in Kotlin 1.9.0-Beta

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYAUITlv' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片