开通邮件订阅服务,有博客更新时将第一时间邮件通知您~
版权声明
本文是
开源实验室原创文章,转载请以
链接形式注明地址:
kymjs.com/note/2018/1…
对本知识点有任何问题,可加我的个人微信:kymjs123
更新简介
Kotlin 1.3-RC 发布啦,这将是 1.3 的最后一个预览版本。
- 从 Kotlin 1.3 开始,协程将进入稳定状态。此后不再会被标注为
experimental
,官方也会提供相应的工具帮助开发者完成迁移工作。 - Ktor,这个库的 API 已经完善,期待大家的使用体验和反馈。Ktor 是一个基于协程的框架,使用它我们可以优雅的构建 Web 应用、Http 服务、移动应用和网页。详细是使用方法可以查看极客时间视频课《快速上手 kotlin 开发》或者我的付费专栏:《 Kotlin Primer》学习。
- 程序入口 main 函数支持无参数的形式,它也可以是一个 suspend 函数。熟悉 Java 的同学一定知道,Java 语言的 main 函数限制参数必须有一个 String[] 类型。
1.2.50
版本开始对脚本的支持也得到了更新和完善。kotlinx.serialization
的插件已经合入 Kotlin 主工程,并且被集成到编译器插件当中。
迁移协程代码
从 Kotlin 1.3 开始,协程将进入稳定状态。鉴于此,大家可以在 1.3.0 发布之后就可以立刻马上迁移协程代码了,此后 kotlin 协程不再会被标注为experimental
,官方也会提供相应的工具帮助开发者完成迁移工作。
coroutine 协程迁移过程注意事项
- 您需要在实验状态下(experimental) 更新到最新的版本,当前最新版是 0.26.1(Kotlin 1.3 发布之前也可能会有少量的更新)
- 将您的项目直接切换到 Kotlin 1.3,IDE 的工具会帮助您完成迁移,目前来说就是切换到
0.26.1-eap13
,这个版本是基于 Kotlin 1.3 构建的。这个迁移工作主要是去掉包名当中的 experimental。 - 待 Kotlin 1.3 正式发版之后,
kotlinx.coroutines
也将会发布 1.0 版,届时您只需要更新版本号,重新编译代码即可。 需要注意的是,kotlinx.coroutines 1.0
将会丢弃所有之前的 0.x 版本中的废弃的接口和声明,与 0.x-eap13 版本并非二进制兼容,因此在切换正式版之前就需要把您代码中使用过时 API 的代码进行整理。 kotlinx.coroutines
也会有一些 API 被标记为“unstable”,它们将会在后续的更新中得到完善。尽管使用这些“unstable”的 API 需要特定的选项配置,但核心 API 都将在 1.0 最终确定并保证如同 Kotlin 标准库一样在后续更新中后向兼容。
Ktor 框架
协程发布了正式版,所以依赖它的 Ktor 异步框架也可以发布正式版了。
Ktor 是一个用于连接应用的异步框架。它包括一个跨平台的 HTTP 客户端和一个基于 JVM 的 HTTP 服务端。
客户端目前已经支持 JVM/Android 和 iOS,后续也将支持更多的平台包括 JS(浏览器)和各种各样的 native 平台。服务端则运行在 JVM 上面,您可以使用 Netty、Jetty 以及其他类似于 Tomcat 的 servlet 容器。
详细是使用方法可以查看极客时间视频课《快速上手 kotlin 开发》或者我的付费专栏:《Kotlin Primer》 xiaozhuanlan.com/kotlinlang 学习。
不需要参数的 main 函数
就像C语言那样,从 Kotlin 1.3 开始允许 “main” 函数的字符串数组参数可选。此后 “Hello, World!” 在 Kotlin 当中就更短了:
fun main() {
println("Hello, World!")
}
Range 迭代时的元素空检查
在 value
是可空类型,同时 Range
是 Iterable
且范围较大时,在 value in from..to
中进行空检查将非常耗时。这种情况下,范围的包含关系判断会退化成 Iterable<T>.contains(T)
,这样整个过程就成了 Iterable
的遍历(直到元素找到或者确定找不到为止)。
为了解决这个问题,我们引入了一系列 contains
的重载,以 IntRange.contains(element: Int?)
为例,它会先检查参数 element
是否为空,紧接着执行一个快速的包含关系判断:
class IntRange(start: Int, endInclusive: Int) : IntProgression(start, endInclusive, 1), ClosedRange<Int> {
...
override fun contains(value: Int): Boolean = first ≤ value && value ≤ last
...
}
@SinceKotlin("1.3")
public inline operator fun IntRange.contains(element: Int?): Boolean {
return element != null && contains(element)
}
协程的 SuccessOrFailure 类更名为 Result
在之前的 Kotlin 1.3
预览版中,官方提供了一个封装 Kotlin 函数结果的类 SuccessOrFailure
,经过 review 和社区反馈,这个版本更名为Result
。这个类目前主要应用于协程,作为Continuation.resumeWith
的参数。Kotlin
中有许多设计线索可用于将来扩展错误处理,这将要求我们重新设计使用此Result
类作为返回类型的代码的语义。因此,为避免将来的设计会破坏此类代码,Kotlin 1.3 编译器会对于这类声明报错,当然标准库函数的一些情况则是例外,因为这些函数仅用于对 Result
类型进行操作。详细请参见 KEEP-127。
废弃整型、浮点型混合的区间包含运算符
整型区间遇到浮点型参数会有这样的情况,例如 3.14 in 1..3
是可以编译运行的,但结果就有点儿尴尬了: true
。我们废弃了这样的 contains
运算符重载,后面会逐渐移除它们。
欢迎您订阅我的付费文章专栏:包含更多有深度技术文章,与未来方向认知。
今天的文章Kotlin 1.3 RC,协程正式版快要发布啦分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/21241.html