10月21日,杭州云栖大会-技术&可持续发展论坛,注册有礼 了解详情
写点什么

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

2018 年 10 月 10 日

在荷兰阿姆斯特丹举行的 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:306150
用户头像

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

关注

评论 1 条评论

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

EMQ X VS RabbitMQ:两大消息服务器 MQTT 性能对比全解(下)

EMQ映云科技

RabbitMQ 物联网 IoT mqtt emq

真香了!牛客网超火1500页2021最新大厂面试真题整理

程序员小毕

Java spring 源码 程序员 面试

“他”靠这份GitHub star过万的1121页图解算法成功杀进字节跳动

Java 编程 程序员 IT 计算机

Angular 依赖注入 - 全面解析

PingCode研发中心

angular 依赖注入 对象提供者 注入器 令牌

音视频编解码 -- 编码参数 CRF

声网Agora

ffmpeg 视频编解码 视频压缩 CRF

EDA 事件驱动架构与 EventBridge 二三事

阿里巴巴云原生

阿里云 云原生 EDA架构 事件驱动型架构

30天肝出来的Java面试手册!登顶Github标星288k

山田心

Java 程序员 架构 面试 后端

秋招如何抱佛脚?2021最新大厂Java面试真题合集(附权威答案)

Java 编程 程序员 架构 IT

Linux服务器部署服务

黄敏

2.两数相加(链表)

黄敏

真香!肝完Alibaba这份面试通关宝典,我成功拿下今年第15个Offer

Java 编程 程序员 IT 计算机

吹爆!阿里高工携18位架构师耗时57天整合的1658页面试总结太香了

Java 编程 程序员 架构 面试

Spring Boot 这样的优化,让你的项目飞起来

程序员小呆

Java 程序员 架构师

2021云栖大会丨果断收藏!「混合云参会指南」来啦~

阿里云情报局

人工智能 阿里云 互联网 云栖大会 前沿科技

自定义View:文字的测量与绘制

Changing Lin

10月日更

递推算法与递推套路(算法基础篇)

有道技术团队

算法 前端 网易有道

绝了!Java程序员面试全方位贴身指南,轻松跳槽获取高薪资offer

山田心

程序员 架构 面试 后端 java

【直播回顾】5步实现精细化用户触达,助力业务增长

极光开发者

消息推送 用户触达

Python代码阅读(第36篇):列表偏移

Felix

Python 编程 Code Programing 阅读代码

动态模型之增压暂停【FunTester测试框架】

FunTester

性能测试 接口测试 测试框架 FunTester 动态模型

Linux渗透:曲折渗透之路

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 安全漏洞

J2PaaS 低代码平台,正式发布开源版!

J2PaaS低代码平台

低代码 零代码 低代码开发 低代码开发平台 无代码平台

拒绝焦虑!Alibaba巨擎随手甩来的一本Java性能优化让我收获满满

Java 白

Java 架构 面试 程序人生 编程语言

智能化如何升级传统厨房烹饪体验?苏泊尔与鸿蒙智联携手交出创新答卷

科技汇

阿里巨擎耗时六个月整理的这套图解HTTP笔记,在Github上被疯狂转载!

Java 白

Java 架构 面试 程序人生 编程语言

汽车的新能源之变,不仅在一块电池

脑极体

面试不要慌!阿里新产Java面试通关笔记(Java基础+算法题+计网+设计模式+数据库+开发框架+中间件技术)全都有

程序员小毕

Java spring 架构 面试 设计模式

MyBatis 执行流程及源码解析

互联网架构师小马

【浪潮云说】直播间第九期今晚20:00准时开播

浪潮云

云计算

好家伙!华为内部Java系统优化笔记一夜之间跃居Github热榜第二

Java 架构 IT 计算机 知识分享

限时开源!阿里内部爆款的顶配版Spring Security笔记

云流

Java spring 编程 架构 面试

数据cool谈(第1期)数据库寻路,开源有态度

数据cool谈(第1期)数据库寻路,开源有态度

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