Kotlin

tags: 技術分享 Kotlin

簡介

  1. Kotlin是一種在Java虛擬機上執行的靜態型別程式語言
  2. 它也可以被編譯成為 JavaScript 原始碼
  3. 它主要是由俄羅斯聖彼得堡的 JetBrains 開發團隊所發展出來的程式語言
  4. 雖然與 Java 語法並不相容,但Kotlin被設計成可以和Java程式碼相互運作,並可以重複使用如 Java 集合框架等的現有Java類別館。

Hathibelagal 寫道,「如果你正在為 Android 開發尋找一種替代程式語言,那麼應該試下 Kotlin。它很容易在 Android 專案中替代 Java 或者同 Java 一起使用。

歷史

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 提供最佳支援

程式碼開發介紹

印出訊息

print("顯示字串")
println("顯示字串並換行")

變數宣告

Kotlin宣告變數使用val及var兩種方式

val(value):宣告不可改變值的變數(常數)
var(variable):宣告可以改變值的變數

val va: Int = 30
var va2: Int = 30

判斷式

注意:Kotlin「?:」運算式,也沒有switch用法。

//if 判斷式
val total = 'eight'
if (total == 'nine ') { 
    println("true")
}
else if (total == 'eight')
    println("true") 
else {
    println("false")
}

//取代Java程式語言的「?:」運算式
val min = if (x < y) x else y

// when 判斷式
when (total) {
    'eight' -> min = x
    'nine' -> min = y
    else -> min = 0
}

when {
    total == 'eight ' -> min = x
    total == 'nine ' -> min = y
    else -> total = 0
}

when (number) {
    1 -> println("Number is 1")
    2 -> println("Number is 2")
    3 -> {
        repeat(number) { index ->
            println("$index = print this line three times.")
        }
    }
    else -> println("Other")
}

迴圈

//while
var i = 0
while (i < 3) {
    print(i)
    i++
}

//do-while
do { 
    print(i)
    i++
} while (i < 3)

// For loop
for (i in 0..10) { println(i) }

// For each
(0..10).forEach { println(it) }

for迴圈

「範圍運算式」使用規則

  1. 從 min(最小值)到 max(最大值)

    ​​​​//for loop
    ​​​​for([變數名稱] in [min]..[max]){}
    
    ​​​​//for each
    ​​​​([min]..[max]).forEach {}
    
  2. 從 min(最小值)到 max-1(最大值)

    ​​​​//for loop
    ​​​​for ([變數名稱] in [min] until [max]){}
    
    ​​​​//for each
    ​​​​([變數名稱] in [min] until [max-1]).forEach {}
    
  3. 從 min(最小值)到 max(最大值),每次增加 Y

    ​​​​//for loop
    ​​​​for([變數名稱] in [min]..[max] step [Y]){}
    
    ​​​​//for each
    ​​​​([min]..[max] step [Y]).forEach {}
    
  4. 從 max(最大值)到 min(最小值)

    ​​​​//for loop
    ​​​​for([變數名稱] in [max]downTo[min]){}
    
    ​​​​//for each
    ​​​​([max]downTo[min]).forEach {}
    
  5. 從 max(最大值)到 min(最小值),每次減少 Y

    ​​​​//for loop
    ​​​​for([變數名稱] in [max]downTo[min] step [Y]){}
    
    ​​​​//for each
    ​​​​([max]downTo[min] step [Y]).forEach {}
    
  6. (key(鍵), value(值)) in map

​​​​```
​​​​for ((key, value) in [map]) {
​​​​    println("$key: $value")
​​​​}
​​​​```
​​​​> Loop https://kotlinlang.org/docs/tutorials/kotlin-for-py/loops.html

存取控制

  1. public:沒有使用關鍵字的時候,預設為public,可以在應用程式任何地方使用
  2. private:只能在宣告的類別或介面中使用
  3. protected:比private多了可以在子類別或子介面中使用
  4. internal:只能在同一模組中使用

Classes

  1. Class
    ​​​​class Person(firstName: String) { 
    ​​​​     val firstProperty = "First property: $name".also(::println)
    ​​​​     init {
    ​​​​        println("First initializer block that prints ${name}")
    ​​​​    }
    ​​​​}
    
  2. 宣告物件
    需要注意,Kotlin 沒有關鍵字new。
    ​​​​val invoice = Invoice()
    
    ​​​​val customer = Customer("Joe Smith")
    
  3. 繼承
    ​​​​open class Rectangle {
    ​​​​    open fun draw() { println("Drawing a rectangle") }
    ​​​​    val borderColor: String get() = "black"
    ​​​​}
    
    ​​​​class FilledRectangle : Rectangle() {
    ​​​​    override fun draw() {
    ​​​​        super.draw()
    ​​​​        println("Filling the rectangle")
    ​​​​    }
    
    ​​​​    val fillColor: String get() = super.borderColor
    ​​​​}
    

    classes https://kotlinlang.org/docs/reference/classes.html

框架

ktor

https://start.ktor.io/
https://ktor.guide/

Spring Boot

https://spring.io/guides/tutorials/spring-boot-kotlin/

參考資料:

維基 https://zh.wikipedia.org/wiki/Kotlin

凌群電子報 http://www.syscom.com.tw/ePaper_New_Content.aspx?id=665&EPID=247&TableName=sgEPArticle

Kotlin: When https://medium.com/@louis383/kotlin-when-e383d642ac79

Kotlin: For-loop vs ForEach https://medium.com/@elye.project/kotlin-for-loop-vs-foreach-7eb594960333

Kotlin:線上編譯器 https://try.kotlinlang.org

Kotlin Koans https://kotlinlang.org/docs/tutorials/koans.html