1 Kotlin:定義和目的

首先呢,你們要的妹紙圖:


うす?まき ナルト.jpg

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}!") }
            }
        }

    }
}

運行結果:


Anko_test.jpg

Kotlin 較于 Java 的優(yōu)勢:

  • 類庫特性(舉例如上)
  • 更好的應用可靠性(空指針校驗等)
  • 性能方面急黎,Kotlin 編譯器生成的代碼和普通Java代碼效率一樣扎狱;使用lambda時,會被許多Kotlin標準庫函數內聯(lián)勃教,確保不會創(chuàng)建新對象淤击,因此應用程序也不必忍受額外的GC暫停

1.4 使用Kotlin工具

和 Java 一樣,Kotlin 也是編譯型語言故源。必須先編譯才能運行Kotlin代碼污抬。

1.4.1 編譯 Kotlin 代碼

Kotlin 構建過程簡介.jpeg

1.4.2 IntelliJ IDEA 和 AndroidStudio 插件

IntelliJ IDEA 的 Kotlin 插件是同步開發(fā)的,它是 Kotlin 可用的功能最全面的開發(fā)環(huán)境绳军。提供了Kotlin開發(fā)所需的全套工具印机。


安裝Kotlin插件.jpeg

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無限制的集成
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末谴蔑,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子龟梦,更是在濱河造成了極大的恐慌隐锭,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件计贰,死亡現(xiàn)場離奇詭異钦睡,居然都是意外死亡,警方通過查閱死者的電腦和手機躁倒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門荞怒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人秧秉,你說我怎么就攤上這事褐桌。” “怎么了象迎?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵荧嵌,是天一觀的道長。 經常有香客問我砾淌,道長完丽,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任拇舀,我火速辦了婚禮逻族,結果婚禮上,老公的妹妹穿的比我還像新娘骄崩。我一直安慰自己聘鳞,他們只是感情好薄辅,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著抠璃,像睡著了一般站楚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上搏嗡,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天窿春,我揣著相機與錄音,去河邊找鬼采盒。 笑死旧乞,一個胖子當著我的面吹牛,可吹牛的內容都是我干的磅氨。 我是一名探鬼主播尺栖,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼烦租!你這毒婦竟也來了延赌?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤叉橱,失蹤者是張志新(化名)和其女友劉穎挫以,沒想到半個月后,有當地人在樹林里發(fā)現(xiàn)了一具尸體窃祝,經...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡掐松,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了锌杀。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片甩栈。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡泻仙,死狀恐怖糕再,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情玉转,我是刑警寧澤突想,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站究抓,受9級特大地震影響猾担,放射性物質發(fā)生泄漏。R本人自食惡果不足惜刺下,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一绑嘹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧橘茉,春花似錦工腋、人聲如沸姨丈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蟋恬。三九已至,卻和暖如春趁冈,著一層夾襖步出監(jiān)牢的瞬間歼争,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工渗勘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留沐绒,地道東北人。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓呀邢,卻偏偏與公主長得像洒沦,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子价淌,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內容