Kotlin 1.3帶來穩定的協程、合約及其他
在荷蘭阿姆斯特丹舉行的ofollow,noindex" target="_blank">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/">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