NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

Kotlin 1.1 新增协程、类型别名特性,提升了对 JavaScript 的支持

  • 2017-03-15
  • 本文字数:1123 字

    阅读完需:约 4 分钟

Kotlin 的市场主管 Roman Belov撰文写到,Kotlin 的新版本引入了多项新的语言特性(其中最值得注意的就是协程),同时还提升了对其JavaScript 目标环境的支持。

尽管依然被认为处于试验性阶段,但是Kotlin 1.1 最关键的新特性之一就是协程(coroutine),这个特性可以通过使用三个高层级的构造(construct)来实现: asyncawaityield。举例来说:我们可以采用asyncawait来处理异步操作:

复制代码
// 在后台线程池中运行代码
fun asyncOverlay() = async(CommonPool) {
// 开启两个异步操作
val original = asyncLoadImage("original")
val overlay = asyncLoadImage("overlay")
// 然后,将 overlay 应用到这两个结果上
applyOverlay(original.await(), overlay.await())
}
// 在 UI 上下文中启动新的协程
launch(UI) {
// 等待异步 overlay 完成
val image = asyncOverlay().await()
// 然后在 UI 上显示
showImage(image)
}

注意,这里使用了launch,它会启动一个协程。实际上,await只能在一个协程中使用或者在使用关键字suspend声明的函数中使用,这样的话,能够让编译器生成相应的代码,从而在协程中运行函数:

复制代码
suspend fun workload(n: Int): Int {
delay(1000)
return n
}

在上例中,delay推迟了协程,并不会阻塞它关联的线程。

协程还能以懒加载的方式借助yield生成序列:

复制代码
// 推断出的类型为 Sequence<int>
val fibonacci = buildSequence {
yield(1) // 第一个 Fibonacci 数字
var cur = 1
var next = 1
while (true) {
yield(next) // 下一个 Fibonacci 数字
val tmp = cur + next
cur = next
next = tmp
}
}
println(fibonacci.take(10).joinToString())
</int>

因为还是试验性的,协程目前只是选择性使用状态(opt-in),它们的 API 在未来的释放版本中可能会有所变更。

Kotlin 1.1 添加的其他重要的新特性包括:

  • 类型别名,允许用户为某种类型定义其他的名称。
  • ::操作符能够获取特定对象某个方法的成员引用。
  • 数据类可以进行扩展。
  • 在 lambdas 中支持 Destructuring。

在对 JavaScript 的支持方面,1.1 版本的主要目标是让对 JavaScript 的支持能够达到与 JVM 对等的程度。这意味着,所有的语言特性都可以在这两个目标平台中使用,不过反射除外,目前 JavaScript 还没有这样的特性。尤其是:

  • Kotlin 标准库中很大一部分都可以用在 JavaScript 上。
  • 生成的代码对 JavaScript 工具更加友好,比如压缩器(minifier),优化器(optimizer)等等。
  • 用于 Kotlin 类声明的external修饰符目前在 JavaScript 中已经实现了。

我们可以使用在线的REPL 来尝试Kotlin,也可以按照多种不同的方式来进行安装。

查看英文原文 Kotlin 1.1 Adds Coroutines, Type Aliases, Improved JavaScript Support

2017-03-15 19:003190

评论

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

2021Android高级面试题,零基础也能看得懂

android 面试 移动开发

2021BAT大厂Android社招面试题,移动开发技术总结

android 面试 移动开发

腾讯TDSQL:带你认识真正的金融级自主可控分布式数据库

腾讯云数据库

数据库 tdsql

2021大厂Android开发面试总结+解答,查缺补漏

android 面试 移动开发

车路协同赋予交通感知,数字技术让管理透明可视

一只数据鲸鱼

车联网 数据可视化 智慧城市 智慧交通

TDSQL-C PostgreSQL(CynosDB) 内核解密-披荆斩棘,勇往直前的腾讯云数据库

腾讯云数据库

数据库 tdsql

2021中级Android开发面试解答,腾讯Android面试题

android 面试 移动开发

TDSQL产品简介以及适用场景

腾讯云数据库

数据库 tdsql

2021大厂Android春招面试经历,Android开发必须掌握

android 面试 移动开发

大天使之剑H5游戏超详细图文架设教程

echeverra

H5游戏 H5

海量数据,极速体验——TDSQL-A核心架构详解来了 ​

腾讯云数据库

数据库 tdsql

2021中级Android开发面试解答,Android面试送分题

android 面试 移动开发

TDSQL核心架构

腾讯云数据库

数据库 tdsql

2021BAT大厂Android社招面试题,Android程序员校招蚂蚁金服

android 面试 移动开发

2021互联网大厂Android面经合集,重磅来袭

android 面试 移动开发

2021大厂Android面试最火问题,【Android面试题】

android 面试 移动开发

2021Android高级面试题汇总解答,阿里内部Android应届生就业宝典

android 面试 移动开发

博客被阮一峰引流后,我对“大数据”的分析与思考

echeverra

博客

2021一位Android中级程序员的跳槽面经,成功拿下大厂offer

android 面试 移动开发

拓路前行-TDSQL追求极致体验的这一路

腾讯云数据库

数据库 tdsql

5种Python使用定时调度任务的方式

华为云开发者联盟

Python 定时调度 调度 循环 调度任务

TDSQL核心特性:极具挑战的“四高”服务与安全可运维

腾讯云数据库

数据库 tdsql

TDSQL金融级特性之:数据强一致性保障

腾讯云数据库

数据库 tdsql

微服务网关Gateway实战

Fox

微服务 Gateway SpringCloud Gateway Spring Cloud Gateway

网站URL如何SEO优化

echeverra

SEO

分布式TDSQL的实践

腾讯云数据库

数据库 tdsql

TDSQL-C的内核关键技术深入解读

腾讯云数据库

数据库 tdsql

又到“乌镇时间” | VoneDAO助力企业打造高效协作新生态

旺链科技

区块链 互联网大会 分布式自治组织

如何写好倒计时

echeverra

JavaScript

Vite + Vue3 + OpenLayers 切换地图容器

德育处主任

大前端 地图 vite Vue3 openlayers

Vite + Vue3 + OpenLayers 手动激活地图

德育处主任

大前端 地图 vite Vue3 openlayers

Kotlin 1.1新增协程、类型别名特性,提升了对JavaScript的支持_Java_Sergio De Simone_InfoQ精选文章