写点什么

Kotlin 1.3 带来稳定的协程、合约及其他

  • 2018-10-10
  • 本文字数:1343 字

    阅读完需:约 4 分钟

在荷兰阿姆斯特丹举行的 KotlinConf 2018 大会上,JetBrains 宣布推出 Kotlin 1.3 RC,引入了新的语言特性,如稳定的协程、合约、内联类等。在 KotlinConf 大会上,谷歌和JetBrains 也宣布了要共同努力建立Kotlin 基金会

协程为设计异步、非阻塞的程序提供了强大的范式。协程是轻量级的线程,使用 CoroutineScope launch 生成。以下是协程的一个极简示例,该协程执行一些并发处理,然后 join 到启动线程。runBlocking 用来包装协程以及启动和等待它的代码块,它定义了协程的作用域:

复制代码
fun main(args: Array<String>) = runBlocking {
val job = GlobalScope.launch {
// 在后台线程中做一些处理
}
println("Hello,")
job.join() // 等待,直到子协程运行完毕
}

协程可以被暂停、重新启动和组合。之前版本的 Kotlin 已经提供了协程功能,但直到 1.3 版才真正稳定下来,这意味着它们的 API 在将来的版本中不会发生变更。 合约(contract)是 Kotlin 类型系统新增的新实验特性,用于描述除函数签名之外的附加保证。JetBrains 工程师 Ilya Gorbunov 将合约描述为一种通过带有对调用方有利的约束的函数签名来丰富可用类型信息的方法

有了合约,函数可以告诉编译器“我将以这种方式来影响智能转型”或“我将立即执行这个 lambda,并且仅执行一次”或“只有当列表为非空时,我才返回 false”,等等。

合约目前用于改进智能转型及更彻底地分析变量初始化:

复制代码
fun test(x: List<Int>?) {
// 如果函数返回 false,那么值肯定不是空的:
if (!x.isNullOrEmpty()) {
println(x.size) // 智能转型成非空!
}
}
fun test(x: Any?) {
// 如果函数返回 (没有抛出异常),那么参数是 true:
require(x is String)
println(x.length) // 这里也会进行智能转型!
}
val x: Int
synchronized(lock) {
x = 42 // 编译器知道 lambda 只被调用一次!
}
println(x) // 编译器现在知道 x 已经赋值了。

内联类是 Kotlin 最新版本中引入的另一个实验性特性。内联类是指只有一个属性的类:
inline class Name(val s: String)它们对于防止重载时发生签名冲突非常有用,如下面的示例所示,它使用不同的内联类型进行三个重载,所有内联类型都映射到 String:

复制代码
fun foo(x: UserName) { ... }
fun foo(x: Login) { ... }
fun foo(x: UserHash) { ... }

一个可能吸引新 Kotlin 开发人员的是改造后的在线playground ,除了新的外观之外,它还提供了一个新的“Kotlin by Example”。 如果你对Kotlin 1.3 带来的所有新特性和改进感兴趣,可以仔细阅读Kotlin 的官方发布公告

另外,谷歌和JetBrains 宣布成立Kotlin 基金会,旨在推动Kotlin 的发展,同时确保Kotlin 保持自由和开放。两年前,谷歌宣布将Kotlin 作为Android 一等开发语言,并开始为其移动平台带来一些改进以便为开发人员提供更好的体验。谷歌表示,Google Play 上排名前1000 的Android 应用中已经有27%已经使用了Kotlin。

如果你使用了JetBrains IntelliJ IDEA,那么使用Kotlin 1.3 RC 就会非常容易,IDEA 内置了对Kotlin 更好的支持。如果你使用Maven/Gradle,需要在配置中添加 https://dl.bintray.com/kotlin/kotlin-eap repo,并获取 1.3.0-rc-57 版本。

查看英文原文 Kotlin 1.3 Introduces Stable Coroutines, Contracts, and More

2018-10-10 18:308936
用户头像

发布了 731 篇内容, 共 468.0 次阅读, 收获喜欢 2006 次。

关注

评论 1 条评论

发布
暂无评论
发现更多内容

淘天集团大模型应用十大挑战命题发布

阿里技术

AI 校招 AIGC 淘天

【华秋商城】海量现货库存 闪电发货

华秋电子

连接器

Flink测试利器之DataGen初探 | 京东云技术团队

京东科技开发者

大数据 测试 flink sql 执行过程 企业号10月PK榜 DataGen

开放原子开源基金会联合主办的2023 CCF中国开源大会即将开幕

开放原子开源基金会

开源 CCF

以效率为导向:用ChatGPT和HttpRunner实现敏捷自动化测试(二) | 京东云技术团队

京东科技开发者

自动化测试 敏捷测试 HttpRunner ChatGPT 企业号10月PK榜

GTD任务管理器Omnifocus Pro 3,合理规划自己的时间

展初云

Mac GTD 待办记事软件

出版行业企业如何快速实现数智化转型?

用友BIP

Fast by BIP 出版行业

当HTAP已成标配,什么才是制胜关键?

MatrixOrigin

分布式数据库 云原生数据库 MatrixOrigin MatrixOne HTAP数据库

FinClip小程序技术,加速国产化应用新进程

FinClip

校源行丨开放原子开源基金会赴北京信息科技大学走访交流

开放原子开源基金会

数字孪生5G智慧工厂3D可视化云平台

2D3D前端可视化开发

物联网 可视化 数字孪生 智慧工厂 智能制造

战略引领 注重实绩 形成闭环——中国交建绩效管理创新与数智化实践

用友BIP

绩效管理

EVE-NG初次启动及WEB客户端访问

小魏写代码

负载均衡详解

天翼云开发者社区

负载均衡 服务器

云网络对等连接产品的高可用保证

天翼云开发者社区

网络 对等连接

如何强制SQL走性能更优的hash join

华为云开发者联盟

数据库 sql 后端 华为云 华为云开发者联盟

户外裸眼3D屏幕合适用什么规格

Dylan

3D LED显示屏 户外LED显示屏 led显示屏厂家

使用 GitHub Action 自动更新 Sealos 集群的应用镜像

硅基新手村

云原生 #go

从原理到实战,详解XXE攻击

华为云开发者联盟

安全 后端 华为云 华为云开发者联盟

可制造性拓展篇│HDI(盲、埋孔)板压合问题

华秋电子

HDI

火山引擎DataTester:跨境电商网站,如何快速实施AB测试 ?

字节跳动数据平台

大数据 A/B 测试 对比实验 数字化增长 企业号10月PK榜

软件测试/测试开发丨Python闭包与装饰器 学习笔记

测试人

Python 程序员 软件测试 自动化测试 测试开发

用友战略签约广联达,共同使能建筑行业企业高质量发展

用友BIP

建筑行业

数据如何同步到云服务器

天翼云开发者社区

云计算 数据迁移

Kotlin 1.3带来稳定的协程、合约及其他_移动_Sergio De Simone_InfoQ精选文章