想寫這個教程有三個緣由,一是 Kotlin 做爲一種新興的編程語言,優勢實在是太多,值得花時間學習掌握;二是 Kotlin 做爲新興的語言,各類教程和資料至關不完善,我做爲 Kotlin 的喜好者,也想爲 Kotlin 的發展貢獻本身的力量;三是由於我在學習 Kotlin 時,被各類特性搞得焦頭爛額,因此想寫個更加有條理、更清晰易懂的 Kotlin 教程。html
好了,閒話少敘,讓咱們開始 Kotlin 學習之路吧!git
知乎有個格言「先是是否是,再問爲何」,想了解一件事件,首先得了解它是什麼、從哪裏來的,再才能談其餘的。想學 Kotlin,咱們先看看它究竟是什麼:github
Kotlin 是由 JetBrains 開發團隊設計的基於 JVM 的靜態型別編程語言,也能夠被編譯爲 JavaScript 源代碼。編程
這裏有幾個重點:eclipse
由 JetBrains 團隊開發:這個 JetBrains 就是那個開發 Intellij IDEA 的公司,所以安裝 Intellij IDEA 時會自動安裝 Kotlin 開發插件,能夠直接用來開發 Kotlin 項目。除此以外,Kotlin 在 Eclipse 上也有對應的開發插件,安裝方法見這裏。編程語言
基於 JVM:JVM 就是 Java Virtual Machine,Java 虛擬機。原來 Java 虛擬機不僅是 Java 語言的虛擬機,只要文件格式知足 JVM 對編譯文件的要求,就能在它上面運行,因此說只要能編譯成符合要求的 Java 字節碼,任何語言都能在 Java 虛擬機上運行。這同時也說明,Kotlin 是一種編譯型語言,它須要先編譯成字節碼,再在 JVM 上運行。ide
靜態型別:什麼是靜態型別?維基百科的解釋是:「若是一個編程語言的類型檢查,可在不測試運行時期表達式的等價性的狀況下進行,該語言即爲靜態類型的。」通常來講有編譯這個執行過程的語言,基本都是靜態類型;而不須要編譯的解釋型語言,通常都是動態類型。從類型的強弱來看,Kotlin 是一種強類型的語言,擁有與 Java 相似的類型系統。函數式編程
JavaScript 支持:從 Kotlin 1.1 開始,Kotlin 徹底支持 JavaScript 平臺的全部語言功能,但由於 JVM 不支持弱類型語言,因此用於 JVM 的 Kotlin 代碼不能直接用在 JavaScript 平臺上。並且由於我不懂 JavaScript,因此有關 JavaScript 的內容本專欄將不予介紹 ( )函數
若是說 Java 是 C++--,那麼 Kotlin 能夠說是 Java++-~~學習
相比較 Java,Kotlin 增長了許多特性,好比 Java 8 以前沒有的 Lambda 表達式、When 表達式、擴展函數、高階函數…… 還有一堆一堆的關鍵字……
相比較 Java,Kotlin 去除了一些特性,好比 final 關鍵字、靜態變量、靜態方法、空指針異常等;
相比較 Java,Kotlin 封裝了許多過程和表示方法,那些在 Java 中須要一大堆代碼的東西,在 Kotlin 中只須要幾行。
Kotlin 沒有徹底取代 Java 語言的野心,它用一種巧妙的方式讓本身騎上了 Java 這隻巨獸,利用 JVM 平臺上豐富的類庫迅速發展。
一方面,它是一種新興的現代編程語言;另外一方面,它又與 Java 有完善的互操做性,完善到能夠直接在 Kotlin 代碼中隨便插入 Java 語句(反正最後都要編譯成字節碼~),一樣能夠在 Java 代碼中調用 Kotlin 語言寫成的函數和類庫。
憑藉與 Java 語言徹底兼容的特性,學習 Kotlin 的成本至關低,你徹底能夠先用 Kotlin 語言寫項目中的非核心代碼,熟練掌握後再用 Kotlin 語言重寫其餘 Java 語言的部分,最終把整個項目遷移到 Kotlin 平臺上來。
主要特色前面介紹得差很少了,這裏總結一下 Kotlin 語言裏其餘的特色:
從 Kotlin 開始學習函數式編程:早在 Java 8 的 Stream API 以前,Kotlin 就已經走上函數式編程的路了,經過函數式編程,你的代碼將變得簡潔而有效。在學習和使用 Kotlin 語言的旅程中,相信你會在一次又一次的驚豔裏領略函數式編程的魅力;
只寫簡潔的代碼:Java 的語法糖太少了!Kotlin 封裝了 Java 裏那些冗長而易錯的代碼,用一個又一個語法糖壓縮你的代碼。不過語法糖太多,一時可能難以消化,若是遇到吃不下去的語法糖,不妨試試用回 Java 代碼哦。
清楚地聲明每個要素:在 Kotlin 裏,只有聲明爲 open 的類才能被繼承,只有聲明爲 open 的方法才能被重寫,子類重寫父類方法時,必須加上 override 關鍵字;聲明變量時,只有用 var 聲明的變量纔是「可變的量」,聲明爲 val 的變量則至關於 Java 中用 final 修飾的常量。這裏就體現出 Kotlin 的哲學了:對於可能產生混淆的地方,都要明確地指定可能混淆的要素,儘可能避免沒必要要的混亂。
做者:CNife連接:https://zhuanlan.zhihu.com/p/26443556