# 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](https://zh.wikipedia.org/wiki/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](https://www.jianshu.com/p/ef3cab8c9226):只能在同一模組中使用 ### 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
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up