Kotlin 1.1新增協程、型別別名特性,提升了對JavaScript的支援
Kotlin的市場主管Roman Belov撰文寫到,Kotlin的新版本引入了多項新的語言特性(其中最值得注意的就是協程),同時還提升了對其JavaScript目標環境的支援。
\\儘管依然被認為處於試驗性階段,但是Kotlin 1.1最關鍵的新特性之一就是協程(coroutine),這個特性可以通過使用三個高層級的構造(construct)來實現:async
、await
和yield
。舉例來說:我們可以採用async
和await
來處理非同步操作:
\// 在後臺執行緒池中執行程式碼\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\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())\\\
因為還是試驗性的,協程目前只是選擇性使用狀態(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
相關文章
- 微軟提議對 JavaScript 進行重大修改:將新增型別標註(Type Annotations)微軟JavaScript型別
- Java 支援的資料型別與 MySQL 支援的資料型別對比Java資料型別MySql
- JavaScript新增型別語法Type SyntaxJavaScript型別
- Golang 庫 Redis 對 data 型別的支援GolangRedis型別
- JavaScript 節點物件的型別與名稱JavaScript物件型別
- [譯]有關Kotlin型別別名(typealias)你需要知道的一切Kotlin型別
- TypeScript type 型別別名TypeScript型別
- TypeScript 強大的型別別名TypeScript型別
- JavaScript引用型別-Object型別JavaScript型別Object
- Python協程與JavaScript協程的對比PythonJavaScript
- Kotlin教程(五)型別Kotlin型別
- Swoole 協程與 Go 協程的區別Go
- Swoole協程與Go協程的區別Go
- 轉:11g對LOB型別的新增功能型別
- C#名稱空間、型別的別名管理C#型別
- 瞭解 Go 1.9 的型別別名Go型別
- JavaScript 中對變數型別的判斷JavaScript變數型別
- 搶先看:JavaScript的新增兩個原始資料型別JavaScript資料型別
- JavaScript值型別和引用型別JavaScript型別
- javascript基本型別 引用型別 基本包裝型別JavaScript型別
- Kotlin的協程Kotlin
- Android 與 JavaScript 互動 支援的資料型別AndroidJavaScript資料型別
- Kotlin可空型別與非空型別以及`lateinit` 的作用Kotlin型別
- TS資料型別:型別別名/聯合型別/字面量型別/型別推論等綱要資料型別
- [提問交流]建立模型,新增屬性,欄位型別如何設定2位小數的欄位型別模型型別
- python 協程與go協程的區別PythonGo
- JavaScript - 基本型別與引用型別值JavaScript型別
- javascript中對變數型別的判斷方法JavaScript變數型別
- Kotlin的基本語法和型別Kotlin型別
- javascript:引用型別JavaScript型別
- JavaScript 基本資料型別和引用型別的區別詳解JavaScript資料型別
- Kotlin 知識梳理(7) Kotlin 的型別系統Kotlin型別
- javaScript中的Array型別JavaScript型別
- javaScript的資料型別JavaScript資料型別
- JavaScript的原生引用型別JavaScript型別
- JavaScript的型別和物件JavaScript型別物件
- FMDB支援的事務型別型別
- Kotlin——初級篇(六): 可空型別、空安全、非空斷言、型別轉換等特性總結Kotlin型別