Can you summarize the following document?
        
  2011年7月,JetBrains推出Kotlin專案,這是一個面向JVM的新語言,它已被開發一年之久。JetBrains負責人Dmitry Jemerov說,大多數語言沒有他們正在尋找的特性,但是Scala除外。但是,他指出Scala的編譯時間過慢這一明顯缺陷。Kotlin的既定目標之一是像Java一樣快速編譯。2012年2月,JetBrains以Apache 2許可證開源此專案。  Jetbrains希望這個新語言能夠推動IntelliJ IDEA的銷售。  Kotlin v1.0於2016年2月15日釋出。這被認為是第一個官方穩定版本,並且JetBrains已準備從該版本開始的長期向後相容性。  在Google I/O 2017中,Google宣佈在Android上為Kotlin提供最佳支援。

  Kotlin很明顯受到Java、C#、JavaScript、Scala、Groovy等語言的影響。例如Kotlin可以直接通過codice_1或codice_2來使用字串模板,和古老的shell script類似。又如Kotlin中的分號是可選的,這類似JavaScript,而且Groovy、Scala也有同樣的能力。Kotlin常量定義關鍵字是codice_3(不同於變數定義關鍵字codice_4),表示固定值,這功能來自Scala,Swift也有類似功能。  需要注意,Kotlin沒有關鍵字codice_5。

  使用codice_3(全稱為value,即(固定的)值)關鍵字定義常量,定義後其值無法修改  使用codice_4(全稱為variable,即變數)關鍵字定義變數。

  使用codice_8關鍵字定義一個函式。  上例定義了一個傳入兩個Int變數,並返回兩數之和的求和函式。

  Kotlin的main函式是不依賴類別的,所以main函式是一個top-level函式。支援Perl和Unix/Linux shell script的字串插值(String interpolation),同樣也支援型別推定。  // Hello, world! 範例 fun main(args: Array<String>) {

  Kotlin與C#、JavaScript類似,能夠擴充套件類別的新功能,而無需繼承該類別,或使用像裝飾器(decorator)這樣的任何型別的設計模式(design pattern)。擴充套件函式可以稱為Kotlin的核心,在標準庫裡到處充斥著擴充套件函式。  擴充套件函式是靜態分發的,也就是說,它們不是以接收者型別為準的虛擬函式。這意味著呼叫的擴充套件函式是由函式呼叫所在的表示式的型別來決定的,而不是由表示式執行時求值結果決定的。  在下述例子中,String類別被擴充套件出一個成員lastChar。  利用函式擴充套件,Kotlin也支援運算子過載:

  Kotlin像C#一樣支援屬性(property)。

  類似Python, 解包(unpack)指的是對實際引數的解包,只需在前面加一個星號* 即可,如test(*a):

  Kotlin支援函式巢狀(nested functions),允許函式內再定義函式,類似JavaScript、C#與Python語言。

  Kotlin支援解構宣告,這與Python的迭代解包相似。  例如, collection object 包含解構式可分離其元素:

  抽象類別(Abstract classes)定義抽象或純虛擬(Pure Virtual)佔位函式,需要被繼承。抽象類別預設是open的。

  Kotlin 提供下列的關鍵字來限制頂層(top-level)宣告,用於控制類別與成員在繼承時的可見性(作用域)。它們可用於類別及其成員: 用於類別的成員宣告時,含義如下:  用於頂層宣告時,含義如下:  例如:

  在Kotlin 中類別可以有一個主建構函式以及多個二級建構函式。如果主建構函式沒有註解或可見性說明,則codice_9關鍵字可以省略。如果建構函式中沒有其它操作,大括號也可以省略。  Kotlin 的二級建構函式更類似於 C++, C#, 和 Java。

  Anko 是一組為Kotlin 打造的函式庫,其功能是用來開發Android UI 應用程式,現已棄用。

  Kotlin除了編譯成Java位元組碼執行,也可以作為指令碼語言解釋執行,此特性使得Kotlin可以以互動模式執行。互動模式是指令碼語言具有的特性,直譯器可以立即執行使用者輸入的程式碼,並反饋執行結果。典型的語言有Python、JavaScript(在V8引擎支援下)、Ruby。 $ kotlinc-jvm type :help for help; :quit for quit »> 2+2 4 »> println("Welcome to the Kotlin Shell") Welcome to the Kotlin Shell

  Kotlin 亦可視為指令碼語言(scripting language)。其指令碼存成 Kotlin source file (.kts),即成為可執行檔。 // list_folders.kts import java.io.File 為了執行Kotlin 指令碼,我們在執行編譯器時再加上選項。 $ kotlinc -script list_folders.kts "path_to_folder_to_inspect"

  fun main(args: Array<String>) {  //inline higher-order functions inline fun greet(s: () -> String) : String = greeting andAnother s()  //infix functions, extensions, type inference, nullable types, lambda expressions, labeled this, elvis operator infix fun String.andAnother(other : Any?) = buildString() { append(this@andAnother); append(" "); append(other?: "") }  //immutable types, delegated properties, lazy initialization, string templates  //sealed classes, companion objects  //extensions, Unit fun String.print() = println(this)

  Kotlin對可以為空(nullable)的變數和不可以為空(non-nullable)的變數作了區分。所有的可空物件(nullable objects)必須在定義時加上 "?" 後置於型別之後。開發人員遇到nullable objects時要先確認: null-check 須被執行過,才能賦值。可空性是Kotlin型別系統中幫助開發者避免以往Java的NullPointerException錯誤的特性。  Kotlin 提供空安全(null-safe)運算子給開發人員: fun sayHello(maybe: String?, neverNull: Int) {  使用安全導引(safe navigation)運算子:

  Kotlin 亦支援高階函式和lambdas功能。lambda是一種匿名函式,允許開發者直接將表示式定義為函式,這類似於Python。  Lambdas 可用大括號來定義。如果lambda 夾帶引數,他們可定義在大括號內,並以運算子區隔。
Kotlin是一種在Java虛擬機器上執行的靜態型別程式語言,它也可以被編譯成為JavaScript原始碼。它主要是由俄羅斯聖彼得堡的JetBrains開發團隊所發展出來的程式語言,其名稱來自於聖彼得堡附近的科特林島。2012年1月,著名期刊《Dr. Dobb's Journal》中Kotlin被認定為該月的最佳語言。雖然與Java語法並不相容,但在JVM環境中Kotlin被設計成可以和Java程式碼相互運作,並可以重複使用如Java集合框架等的現有。Hathibelagal寫道,“如果你正在為Android開發尋找一種替代程式語言,那麼應該試下Kotlin。它很容易在Android專案中替代Java或者同Java一起使用。”