紫韻 の Kotlin 學(xué)習(xí)之旅 -- Kotlin ?


前一篇文章主要分享了一些 Kotlin 的學(xué)習(xí)資源咐柜,本文開始切入 Kotlin 學(xué)習(xí)之旅的正題碟贾。


Kotlin ?

Kotlin 是 JetBrains 公司于 2010 年推出的一個基于 JVM 的現(xiàn)代編程語言,該公司或許大家并不是特別清楚慌洪,但該公司開發(fā)的 IDE -- IntellijIDEA轩端、AndroidStudio遵绰、pyCharm等大家應(yīng)該或多或少有所了解,反正 Ziyun 小編現(xiàn)在已經(jīng)深深地愛上了這三個 IDE忠蝗。

Kotlin 有什么過人之處现横,會被 Google 大大欽點呢?下面我們一起來細(xì)數(shù)下那些 Kotlin 的特點 & 優(yōu)點:

  1. Kotlin 能夠得到 Android 開發(fā)工具 AndroidStudio 和 Android 構(gòu)建系統(tǒng)的完全兼容阁最。AndroidStudio 的支持是必然的戒祠,畢竟兩者均出自 JetBrains 公司,對于自家的產(chǎn)品速种,肯定會提供最好的服務(wù)的姜盈。

  2. 與 Java 語言間完美的互操作性:Kotlin 可以與 Java 進(jìn)行 100% 的互操作,這也就意味著可以在 Kotlin 代碼中調(diào)用現(xiàn)有的 Java 代碼配阵,從而現(xiàn)有的 Android 類庫均可無需修改即在 Kotlin 代碼使用馏颂。下圖展示了一個用 Kotlin 語言編寫的類,通過該圖中的方法說明部分可以看出:該類中的 db.close() 一句調(diào)用的是 Android 類庫中的 close() 方法棋傍。

    Kotlin & Java

  3. Null safe:空安全指 Kotlin 語法強(qiáng)制開發(fā)人員在編譯時就對各種 null 情況進(jìn)行處理救拉,從而避免在運行時出現(xiàn)空指針異常,引發(fā)程序故障瘫拣。
    在 Kotlin 中有兩類變量亿絮,可空變量和不可空變量。可空變量通過在變量后面添加一個問號 ? 表示派昧,不可空變量則沒有問號黔姜。對于不可空變量,必然不會產(chǎn)生空指針異常斗锭,因為當(dāng)你為一個不可空變量賦予一個 null 值時地淀,編譯器會報錯,強(qiáng)制你必須將其設(shè)為非空值岖是。而對于可空變量帮毁,雖然可以為其賦予一個 null 值,但再將其傳入一個非空值環(huán)境時豺撑,編譯器會強(qiáng)制你進(jìn)行 null 檢查烈疚,否則編譯不過。
    從下圖中可以看出聪轿,一個不可空的變量是不能夠賦予 null 值的爷肝,編譯器會報錯,除非你將該變量設(shè)為一個可空變量陆错,或賦予一個非 null 的值灯抛。

    AS-12.gif

    下圖演示的是編譯器強(qiáng)制開發(fā)者對可空變量進(jìn)行 null check。
    AS-13.gif

    通過以上兩幅動圖可以看出音瓷,Kotlin 將空安全檢測由開發(fā)者自行進(jìn)行轉(zhuǎn)移到了編譯器对嚼,這樣就可以避免因為開發(fā)者的疏忽而導(dǎo)致運行時出現(xiàn)惱人的 NullPointerException。這還真是一件樂事呀绳慎,畢竟我想所有的 Java 程序員都經(jīng)歷過 n 次 NPE 折磨了吧(

  4. 函數(shù)式編程:Kotlin 中使用了函數(shù)式編程的概念纵竖,函數(shù)作為 Kotlin 中的一等公民可以像其他對象一樣作為函數(shù)的輸入與輸出,在 Kotlin 中可以使用 Lambda 表達(dá)式來更方便地解決問題(然而這也是我作為一個 Java 程序媛最難以理解的地方(555))杏愤。得益于函數(shù)式編程靡砌,Kotlin 中的 Collections 提供了一系列很好用的集合操作符,恰當(dāng)使用這些操作符可以很方便地進(jìn)行開發(fā)(小編很心水它們珊楼,然而要用慣用好它們通殃,表示道路阻且長)。

class Test {

    fun fun1(str: String, add: (Int, Int) -> Int) {
        val a = 5
        val b = 10
        print(str + add(a, b))
    }

    fun fun2(add: (Int, Int) -> Int) {
        val a = 5
        val b = 10
        print(add(a, b))
    } 

    fun fun3() {
        val str: String = "sum is: "
        fun1(str) {
            a, b ->
            a + b
        }
        fun1(str, { a, b -> a + b })
        fun2 { a, b -> a + b }
    } 

    fun fun4(a: Int, b: Int): (Int, Int) -> Int {
        return { a, b -> a + b }
    }
}

上面一段代碼實現(xiàn)了 4 個函數(shù)厕宗,下面分別解釋下這四個函數(shù):

1). fun1:含有兩個參數(shù)的函數(shù)邓了,其中第二個參數(shù)是一個 Lambda 表達(dá)式;
2). fun2:只有一個 Lambda 表達(dá)式參數(shù)的函數(shù)媳瞪;
3). fun3:演示如何調(diào)用含有表達(dá)式參數(shù)的函數(shù)≌毡Γ可以看到 {} 中的部分表示一個 Lambda 表達(dá)式蛇受。Kotlin 中規(guī)定,當(dāng)函數(shù)的最后一個參數(shù)是 Lambda 時厕鹃,可以將 {} 移到包含參數(shù)的 () 外兢仰;當(dāng)函數(shù)只有一個 Lambda 表達(dá)式參數(shù)時乍丈,可以省略 ()。所以可以使用 fun3 中的形式調(diào)用 fun1 和 fun2把将;
4). fun4:返回值為 Lambda 表達(dá)式的函數(shù)轻专。

  1. 異常簡潔優(yōu)雅好用的擴(kuò)展函數(shù):擴(kuò)展函數(shù)即用于擴(kuò)展一個類或一個屬性的功能的函數(shù)。當(dāng)程序中期望某個類具有某些功能時察蹲,可以通過為該類實現(xiàn)一個擴(kuò)展函數(shù)而達(dá)到目的请垛,即便我們沒有該類的訪問權(quán)限,也不妨礙我們?yōu)樵擃愄砑訑U(kuò)展函數(shù)以擴(kuò)展功能洽议。擴(kuò)展函數(shù)表現(xiàn)得好像就是該類所具有的函數(shù)一樣宗收,同時我們還可以直接在類擴(kuò)展函數(shù)中使用 this 關(guān)鍵字表示該類對象,也可以在擴(kuò)展函數(shù)中訪問類的 public 方法和屬性亚兄。Kotlin 支持 擴(kuò)展函數(shù)擴(kuò)展屬性混稽。
fun Context.toast(message: CharSequence) = Toast.makeText(this, message, Toast.LENGTH_SHORT).show()

上面代碼為 Context 類添加了一個 toast 的擴(kuò)展函數(shù),通過該函數(shù)可以擴(kuò)展 Context 的功能审胚。任意 Context 子類匈勋,如 Activity、Service 等均可直接調(diào)用該函數(shù)膳叨,只需傳入一個字符串即可洽洁。
如在 Activity 中可以如下使用:

toast("You clicked the item ")
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市懒鉴,隨后出現(xiàn)的幾起案子诡挂,更是在濱河造成了極大的恐慌,老刑警劉巖临谱,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件璃俗,死亡現(xiàn)場離奇詭異,居然都是意外死亡悉默,警方通過查閱死者的電腦和手機(jī)城豁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抄课,“玉大人唱星,你說我怎么就攤上這事「ィ” “怎么了间聊?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長抵拘。 經(jīng)常有香客問我哎榴,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任尚蝌,我火速辦了婚禮迎变,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘飘言。我一直安慰自己衣形,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布姿鸿。 她就那樣靜靜地躺著谆吴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪般妙。 梳的紋絲不亂的頭發(fā)上纪铺,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天,我揣著相機(jī)與錄音碟渺,去河邊找鬼鲜锚。 笑死,一個胖子當(dāng)著我的面吹牛苫拍,可吹牛的內(nèi)容都是我干的芜繁。 我是一名探鬼主播,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼绒极,長吁一口氣:“原來是場噩夢啊……” “哼骏令!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起垄提,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤榔袋,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后铡俐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體凰兑,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年审丘,在試婚紗的時候發(fā)現(xiàn)自己被綠了吏够。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡滩报,死狀恐怖锅知,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情脓钾,我是刑警寧澤售睹,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站可训,受9級特大地震影響昌妹,放射性物質(zhì)發(fā)生泄漏生真。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一捺宗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧川蒙,春花似錦蚜厉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至康聂,卻和暖如春贰健,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背恬汁。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工伶椿, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人氓侧。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓脊另,卻偏偏與公主長得像,于是被迫代替她去往敵國和親约巷。 傳聞我的和親對象是個殘疾皇子偎痛,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內(nèi)容