從零開始學 Kotlin 之「1」基礎篇
前言
大家好,這裡是「從零開始學 Kotlin 之『1 』基礎篇」,本文首發於公眾號「Binguner」,歡迎前往大家關注。我會每週分享一些關於 Android 和其他方向的技術乾貨或一些關於認知的文章。學習一門技術最好的方式就是去教會別人,所以,開始今天的學習吧!
01 Kotlin 的前世今生
Kotlin 是由 JetBrains 這家公司開發的一門基於 JVM 的語言。也許你沒聽說過 JetBrains,但我相信你一定聽說過大名鼎鼎的 IDEA(最好用的 Java IDE),就連 Android Studio 也是基於 IDEA 的二次開發產物。並且在 2017 年的 Google I/O 大會上,Google 宣佈了將 Kotlin 作為了 Android 開發的官方語言,所以,正在做 Android 開發,或者想要學習 Android 開發的同學,你還有什麼理由不去學 Kotlin 呢?
02 Kotlin 的歷史
2011 年 7 月,JetBrains 推出 Kotlin 專案,這是一個面向JVM的新語言,它已被開發一年之久。JetBrains 負責人 Dmitry Jemerov 說,大多數語言沒有他們正在尋找的特性,但是 Scala 除外。但是,他指出 Scala 的編譯時間過慢這一明顯缺陷。 Kotlin 的既定目標之一是像 Java 一樣快速編譯。2012年2月,JetBrains 以 Apache 2 許可證開源此專案。
Kotlin v1.0 於 2016 年 2 月 15 日釋出。這被認為是第一個官方穩定版本,並且 JetBrains 已準備從該版本開始的長期向後相容性。
在 2017 年的 Google I/O 宣佈在 Android 上為 Kotlin 提供最佳支援。
03 Kotlin 的特點
Kotlin 程式碼可以被編譯成 JVM 位元組碼或者 JavaScript 程式碼。也就是說,Kotlin 不僅可以用來寫 Android,還可以用來開發後端,寫前端,甚至和 OC、Swift 進行互動。
Kotlin 是空安全的。Kotlin 的 null-safe 機制是指編譯器會自動標記那些可能為空的引用,並且可以用一種簡單的方式避免出現 NullPointException。
Kotlin 支援很多新的語言特性。lambda、函數語言程式設計、擴充套件函式、運算子過載、字串差值、行內函數、委託等等,Kotlin 都支援。
當然還有最重要的一點,Kotlin 很簡潔。Kotlin 不用寫封號,有專門的 data class 用來代替自己寫複雜的資料類,還有自動識別變數型別等等。
04 開始使用 Kotlin
04 - 1 在 IDEA 中使用 Kotlin
-
下載最新的 IDEA 版本就可以編寫 Kotlin,IDEA 從版本 15 之後就自帶了 Kotlin 的環境。
-
建立一個新的 Kotlin 專案 TestProject 。

建立 Kotlin 專案
- 專案目錄結構如下

專案目錄結構
- 右擊 src 建立一個 Kotlin 檔案

建立 Kotlin 檔案
- 在檔案中編寫程式碼
fun main(args: Array<String>){ println("Hello world!") }
- 選中 main 後右擊,點 Run

執行 Kotlin 方法
- 然後就可以在控制檯看到輸出效果了

執行效果
04 - 2 互動式的 Shell
在命令列中輸入
$ curl -s https://get.sdkman.io | bash
然後再一個新的視窗中輸入
sdk install kotlin
- Mac OS 下通過 Homebrew 安裝
$ brew update $ brew install kotlin

shell
04 - 3 在 Android Studio 中使用 Kotlin
Android Studio 3.0 和之後的版本都自帶了 Kotlin 外掛,在之前的版本中向使用 Kotlin,選在 Plugins 選項,選擇 Browse Repositories,然後搜尋 Kotlin 並安裝,即可使用 Kotlin。

在 Android Studio 中安裝 Kotlin 外掛
04 - 4 線上編寫
開啟 Kotlin Playground 即可線上編寫 Kotlin 程式碼

Kotlin Playground
05 基礎語法
05 - 1 宣告變數
在 Kotlin 中宣告變數直接使用「var」和「val」
var nameA:String = "Tom" var ageA = 14// Int 型別會被編譯器自動推匯出來 val nameB = "Jack"// String型別會被編譯器自動推匯出來 val ageB:Int = 24
var 宣告的是可變變數
val 宣告的是隻讀變數,相當於 final 變數
05 - 2 定義包
package Package1 import java.math.BigInteger
package 用於包宣告
Import 可以匯入類和方法
05 - 3 定義方法
// 這個方法有兩個 Int 引數,一個 Int 返回型別。 fun sum(a: Int, b: Int): Int { return a + b }
在這段程式碼中,
- fun 用於表示這是一個函式
- sum 是函式名
- 小括號裡的值是引數,格式為:引數名稱 : 引數型別
- 小括號外的「:Int」指返回型別為 Int,如果無返回型別,可以省略,或者宣告為 Unit
當然,也可以返回一個表示式體
fun sum(a:Int, b:Int) = a + b
這段程式碼隱藏了返回型別,返回型別直接有表示式體推倒出來。
05 - 4 註釋
Kotlin 中註釋的使用和 Java 一樣
// 這是單行注射 /** * 這是多 * 行注射 */
05 - 5 使用字串模版
Kotlin 可以直接在引號內藉助符號「$」直接使用變數,用法如下
val name = "Tom" println("Name is $name")// 輸出:Name is Tom
當然也可以使用物件的方法
val name = "Tom" println("Name is $name") println("Name's length is ${name.length}")// 輸出 Name's length is 3
若想使用「$」符號可以這樣
${'$'}
05 - 6 If 表示式
//求兩個 Int 值中的最大值 fun maxOf(a: Int, b: Int): Int { if (a > b) { return a } else { return b } }
在表示式中也可以用 if
val a = 3 val b = 4 val max = if(a > b) a else b
05 - 7 when 表示式
在 Kotlin 中,沒有 switch 操作符,而是用 when 代替了它。when 相比 switch 更加強大,在 when 中可以使用任何物件。
val a = 2 when(a){ // 當 a = 1,或者 a = 2 的時候,執行第一條語句 1,2 -> println("a = $a") 3,4 -> println("a = $a") 5,6 -> println("a = $a") else -> println("Other number") }
05 - 8 區間
Kotlin 沒有常規的 for 迴圈語法,它使用區間來表示某個迴圈條件
例如:建立從 1 到 10 的區間,包括 10。
val range = 1..10
建立從 1 到 10 的區間,不包括 10。
val range = 1 until 10
建立從 10 到 1 的區間
val range = (1..10).reversed() val range1 = 10 downTo 1
也可以建立給區間建立步長
val range = 1..10 step 2 for (i in range){ print("$i ") }//輸出 1 3 5 7 9
靈活的 Kotlin 甚至可以直接建立字母的區間
val range3 = 'a'..'z' for (i in range3){ print("$i ") }// 輸出 a b c d e f g h i j k l m n o p q r s t u v w x y z
05 - 9 迴圈
Kotlin 中的迴圈又 while 迴圈,do-while 迴圈,for 迴圈
具體的語法如下:
while (condition){ // do something } do { // do something }while (condition) for (i in 1..10){ print("$i ") }// 輸出 1 2 3 4 5 6 7 8 9 10
05 - 10 型別檢查和型別自動轉換
Kotlin 中通過「is」運算子來判斷一個變數是否是一個型別的例項,和 Java 中的 instanceOf 類似,如果通過 is 運算子,確認了這個變數是該型別的例項,這個變數就會自動轉換為這個型別的一個例項,無需再進行轉換。
val value = "string" if (value is String){ println("Length is ${value.length}") }
is 也可以用在 when 表示式中
val value = "string" when(value){ is String -> println("Value is String type") is Int -> println("Value is Int type") is Char - > println("Value is Char type") }
05 - 11 集合的使用
建立一個集合,並用 for 迴圈遍歷:
val items = listOf("One","Two","Three") for (item in items){ print("$item ") } // 輸出 One Two Three
也可以在用 when 去檢查集合中的元素
when{ "One" in items -> println("One") "Four" in items -> println("Four") }
最後
「從零開始學 Kotlin 之『1』基礎篇」到這裡就結束了。
一下子記住這麼多知識點有些困難,所以為了方便大家的記憶與複習,我做了一張思維導圖放到下面,大家可以把圖片儲存下來,有時間便去回顧學到的東西。

從零開始學 Kotlin 之「1」基礎篇.png
歡迎關注本文作者,這個系列的文章會首發在這裡:

image
掃碼關注 + 回覆「kotlin」,獲取我整理的最新版 Kotlin 學習視訊。