Kotlin (cot-lin) 是一種針對 Java 平臺的編程語言。大概與 2010 年Kotlin誕生於 JetBrains 公司 (就是那個開發了不少很好用的 IDE 的公司)。Kotlin 以靠近俄羅斯聖彼得堡的一座島嶼命名 (我以爲這個應該是學習 Java 的)。Kotlin 的特性是簡潔 , 安全,實用,專一於和 Java 的互操做性。能夠應用在服務端開發, Android 開發。編程
Kotlin 幾乎能夠運行在如今 Java 語言運行的任何地方,可是它相比較於 Java 語言更簡潔, 更高效 , 更安全 , 實用性很強,擯棄了一些爲了迎合某些概念而產生的代碼,好比說 Java 中常見的無狀態工具類,其中全是靜態函數,由於 Java 號稱是純面向對象的編程語言,可是現實情況中並非全部場景下都須要擁有一個對象才能進行工做。好比說 Java 中的匿名類,匿名對象。 除了 Java 語言以外,Kotlin 還能夠被編譯成 JavaScript ,容許在瀏覽器中運行 Kotlin 代碼。瀏覽器
Kotlin 是一種靜態類型的編程語言和 Java 同樣,全部表達式的類型是在編譯期間就已經肯定了的 。安全
Kotlin 與 Java 不一樣的是不須要在源碼中顯示的聲明每一個變量的數據類型。在不少狀況下變量的類型是能夠根據上下文推斷出來的,這樣就省略了類型聲明,這樣就能夠省略掉不少沒必要要的代碼,你的代碼將會變得更加簡短,清晰。多線程
函數式編程的核心概念:
頭等函數 —— 把函數 (一小段行爲)看成值使用,能夠用變量保存它,把它作爲參數傳遞,或者看成其餘函數的返回值。
不可變性 —— 使用不可變對象,這保證了它們的狀態在建立以後再也不會改變。
無反作用 —— 使用的是純函數。此類函數在輸入相同時候會產生一樣的結果,而且不會修改其餘對象的狀態,也不會和外界產生交互。編程語言
函數式編程風格的代碼最大的好處就是簡潔,可以避免不少重複的代碼還有沒必要要的類聲明,由於不少狀況下你須要的僅僅只是一個函數,而不是類和對象如此沉重的內容。函數式編程的另外一個好處就是線程安全性。函數式編程
Kotlin 對函數式編程的支持:
函數類型,容許函數接受其餘函數做爲參數,或者返回其餘函數。
lambda 表達式,用最少的樣板代碼方便的傳遞代碼塊。
數據類,提供了建立不可變值對象的簡明語法。
標準庫中豐富的API集合,能夠用函數式編程風格操做對象和集合。函數
Kotlin 的使用性體如今它解決了不少實際編程過程當中遇到的問題,以及一些讓開發人員感受到怪異或者繁瑣彆扭的一些狀況。好比不少狀況下我再編寫 Java 代碼,我在調用一個函數的時候須要傳入一個接口類型的參數,而這個接口只有一個函數,此時我只須要一個函數就能夠搞定問題,我並不想花一些時間再去編寫一個類實現這個接口。再好比強制類型轉換的問題,當我在 Java 代碼中用 instanceof 檢測了某個對象是否屬於某個數據類型爲 true 時,卻還要強制的進行一次類型轉換。這讓我感受到很麻煩和多餘。總的來講 Kotlin 並無爲了迎合某些編程理念去犧牲實用性,反而實用性是最爲重要的一點。
Kotlin 設計的目的就是儘量的依賴已經出現再其餘編程語言中而且被證明了成功的哪些特性和解決方案,這下降了語言的複雜性,讓kotlin更加容易學習。工具
在 Kotlin 中實用是很重要的,Kotlin 會努力保證你寫的代碼都是有實際的意義,而不只僅是爲了知足代碼結構的須要,或者是爲了迎合一些編程理念。在 Kotlin 中許多在 Java 中出現的樣板代碼 ,好比 getter ,setter ,以及在構造函數中給成員變量賦值的樣板代碼在 Kotlin 中都是隱式的。智能類型推斷,運算符重載,對函數式編程的支持都可以使你的代碼變得簡潔。性能
Kotlin 試圖實現比 Java 更高的安全級別,同時保持比較低的成本。作爲面向 JVM 的靜態類型語言,Kotlin 保證了應用程序的類型安全。這比使用 Java 的成本要更低,不須要指定全部的類型聲明,由於許多狀況下編譯器會從上下文中自動推斷出變量的類型。本來在運行時失敗的錯誤在編譯器檢查中就被阻止了,好比 NullPointerException ,Kotlin 的類型系統跟蹤哪些能夠或不能夠爲 null 的值,而且禁止哪些運行時可能致使 NullPointerException 的操做,若是你對一個可 null 的變量上沒有通過是否爲 null 就作了操做,那麼連編譯都不能經過。另外一個異常類型時 ClassCastException , ,當你把一個對象轉換成一種類型,而沒有事先檢查它是不是該類型時,就會發生這個異常。在 Kotlin 中檢查和轉換被組合成了一次操做:一旦檢查過類型,不須要要額外的轉換就能直接引用屬於該類型的成員。這樣,開發者就沒有理由跳過檢查,也不會給潛在的運行時錯誤留下可乘之機。學習
Java 開發者在使用 Kotlin 以前最關心的一個問題應該是:「我是否是能夠繼續使用現有的 Java 語言編寫的庫?」。答案固然是確定的, Kotlin 對這方面給出了最高的保證,不管須要使用那種庫提供的 API ,均可以在 Kotlin 中使用它。能夠調用 Java 的方法, 繼承 Java 的類和實現 Java 接口,在 Kotlin 上應用 Java 的註解等等。Java 和 Kotlin 能夠絕不費力的互相調用。Kotlin 在最大程度上使用了現有的 Java 庫,好比集合庫 Kotlin 沒有本身的集合庫, 而是徹底依賴於 Java 標準庫的集合庫,使用額外的擴展函數來擴展他們的功能。同時在工具層面 IDEA 也給予了很好的支持, 提供了一個 Java 代碼與 Kotlin 代碼的轉換器。自由的在 Java 和 Kotlin 源碼文件之間切換。調試混合語言的項目,能夠在不一樣語言編寫的代碼之間進行單步調試。重構 Java 方法的時候,Kotlin 代碼中對他們的調用也會獲得正確的更新,反之亦然。