首先呢,你們要的妹紙圖:
1.1 Kotlin 初體驗
/**
* 代碼示例:
* data 數據類
* maxBy 函數 (查找列表中年紀最大的人)
* lambda表達式 it.age (使用 it 作為這個參數的默認名稱)
* Elvis運算符 ?: ( ?: 0 的意思是骑冗,如果age屬性為null入撒,會返回0)
*
*/
data class Person(val name : String,val age : Int ?= null)
fun main(args: Array<String>) {
val persons = listOf(Person("lily"),Person("Bob",age = 29))
val oldest = persons.maxBy{it.age ?: 0}
println("The oldest is : $oldest")
}
//運行結果:
//The oldest is : Person(name=Bob, age=29)
1.2 Kotlin 的主要特征
1.2.1 目標平臺:服務器端隆豹、Android及任何Java運行的地方
Kotlin最常用的應用場景:
- 編寫服務端代碼(典型的代表是Web應用后臺)
- 創(chuàng)建 Android 設備上運行的移動應用
除了 Java 外,Kotlin 還可以編譯成 JavaScript茅逮,允許在瀏覽器中運行 Kotlin代碼
1.2.2 靜態(tài)類型
Kotlin 和 Java 都是靜態(tài)類型的編程語言
靜態(tài)類型語言的優(yōu)點:
- 性能——方法調用速度更快璃赡,因為不需要在運行時才判斷調用的是哪個方法
- 可靠性——編譯器驗證了程序的正確性,因而運行時崩潰的概率更低
- 可維護性——陌生代碼更易維護献雅,因為可以看到代碼中用到的對象的類型
- 工具支持——靜態(tài)類型是 IDE 能提供可靠的重構鉴吹,精確的代碼補全及其他功能
再說一下動態(tài)類型的編程語言,比如在JVM上的 Groovy 和 JRuby
什么是動態(tài)類型語言惩琉?
- 允許定義可以存儲任何數據類型的變量豆励,或者返回任何數據類型的函數,并在運行時才解析方法和字段引用
動態(tài)類型語言的特點:
- 優(yōu)點——減少代碼量并增加創(chuàng)建數據結構的靈活性
- 缺點——在編譯器不能發(fā)現(xiàn)像名字拼寫錯誤這樣的問題瞒渠,進而導致運行時的錯誤
Kotlin的類型推導
與Java不同良蒸,Kotlin不需要在源代碼中顯式的聲明每個變量的類型。
//舉例伍玖,聲明一個變量
val x=1
在聲明這個變量時嫩痰,由于變量初始化為整型值,Kotlin自動判斷出它的類型是整型窍箍。
編譯器這種從上下文推斷變量類型的能力被稱作類型推導
Kotlin的新概念
對可空類型的支持
對函數類型的支持
...
后續(xù)文章詳細介紹...
1.2.3 函數式和面向對象
函數式編程的核心概念:
- 頭等函數——把函數(一小段行為)當做值使用串纺,可以用變量保存它丽旅,把它當做參數傳遞,或者作為其他函數返回值
- 不可變性——使用不可變對象纺棺,這保證了它們的狀態(tài)在其創(chuàng)建后不能再變化
- 無副作用——使用的是純函數榄笙。此類函數在輸入相同時會產生相同的結果,并且不會修改其他對象的狀態(tài)祷蝌,也不會和外面的世界交互茅撞。
Kotlin建議采用函數式(當然也支持面向對象,看各人喜好了)
函數式編程的好處:
- 簡潔——lambda表達式
- 多線程安全——不可變數據結構&純函數
- 測試更加容易——沒有副作用的函數
Kotlin 擁有豐富的特性集巨朦,一開始就支持函數式編程:
- 函數類型米丘,允許函數接受其他函數作為參數,或者返回其他函數
- lambda表達式
- 數據類糊啡,提供了創(chuàng)建不可變值對象的簡明語法
- 標準庫中包括了豐富的API集合拄查,讓你用函數式編程風格操作對象和集合
// lambda 表達式
fun findBob() = findPerson{it.name == "Bob"}
1.3 Kotlin 應用
1.3.1 服務端的Kotlin
與現(xiàn)有Java代碼無縫的互操作性,是其勝任的一大優(yōu)勢棚蓄。
使系統(tǒng)的代碼更緊湊堕扶、更可靠、更易于維護癣疟。
Kotlin特性之一 HTML生成庫
// HTML 生成庫的的簡單用例,生成HTML頁面
fun renderPersonList(persons:Collection<Person>)=createHTML().table{
for(person in persons){
tr{
td { +person.name}
td { +person.age}
}
}
}
Kotlin特性之二 持久化框架
例如潮酒,Exposed框架
1.3.2 Android 上的 Kotlin
Anko庫的一個簡單例子如下:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 通過下面代碼睛挚,無需XML文件布局,直接生成界面
verticalLayout {
val name = editText()
button("Say Hello") {
onClick { toast("Hello, ${name.text}!") }
}
}
}
}
運行結果:
Kotlin 較于 Java 的優(yōu)勢:
- 類庫特性(舉例如上)
- 更好的應用可靠性(空指針校驗等)
- 性能方面急黎,Kotlin 編譯器生成的代碼和普通Java代碼效率一樣扎狱;使用lambda時,會被許多Kotlin標準庫函數內聯(lián)勃教,確保不會創(chuàng)建新對象淤击,因此應用程序也不必忍受額外的GC暫停
1.4 使用Kotlin工具
和 Java 一樣,Kotlin 也是編譯型語言故源。必須先編譯才能運行Kotlin代碼污抬。
1.4.1 編譯 Kotlin 代碼
1.4.2 IntelliJ IDEA 和 AndroidStudio 插件
IntelliJ IDEA 的 Kotlin 插件是同步開發(fā)的,它是 Kotlin 可用的功能最全面的開發(fā)環(huán)境绳军。提供了Kotlin開發(fā)所需的全套工具印机。
1.4.3 交互式 shell (又稱REPL)
快速的試驗Kotlin代碼小片段,可以逐行輸入Kotlin代碼來查看它的執(zhí)行結果门驾。
也可以運行不帶參數的 kotlinc 命令或者使用IntelliJ IDEA插件中的響應式菜單按鈕射赛。
1.4.4 Eclipse 插件
請選擇Help > Eclipse Marketplace 菜單項,然后在列表中搜查Kotlin奶是。
1.4.5 在線 playground
1.4.6 Java 到 Kotlin 的轉換器
轉換器將會自動的幫你把代碼翻譯成Kotlin
1.5 小結
- Kotlin 是靜態(tài)類型語言并支持類型推導楣责,允許維護正確性與性能的同時保持代碼簡潔
- Kotlin 支持面向對象和函數式兩種編程風格竣灌,通過頭等函數使更高級別的抽象成為可能,通過支持不可變值簡化了測試和多線程開發(fā)
- 服務端開發(fā)秆麸,全面支持所有現(xiàn)存的Java框架初嘹,為常見的任務提供了新工具,如 生成HTML 和 持久化
- Android端開發(fā)蛔屹,緊湊的運行時削樊、對 Android API 特殊的編譯器支持以及豐富的庫,為常見的 Android 開發(fā)任務提供了 Kotlin 友好的函數
- 免費和開源兔毒,全面支持主流的 IDE 和 構建系統(tǒng)
- Kotlin是務實的漫贞、安全的、簡潔的育叁,與Java可互操作迅脐,意味著它專注于使用已經證明的解決方案處理常見任務,防止常見的像NullPointerException ,支持緊湊和易讀的代碼豪嗽,以及提供與Java無限制的集成