kotlin入門(2)——什么是kotlin

什么是kotlin?

Kotlin 是一個用于現代多平臺應用的靜態編程語言 [1],由JetBrains開發。

Kotlin可以編譯成Java字節碼,也可以編譯成JavaScript,方便在沒有JVM的設備上運行。

Kotlin已正式成為Android官方支持開發語言。

100%兼容Java

Kotlin-Js前端開發

Kotlin-Jvm服務端開發

Kotlin-Native 本地執行程序

Kotlin發展歷程

2010 立項

2011.6 對外公開

2012.2 開源

2013.8 支持Android Studio

2014.6 全新開源web站點和域名Kotlinlang.org

2016.2 發布1.0

2016.9 發布1.0.4 支持apt

官方文檔https://kotlinlang.org/docs/reference

Kotlin源碼https://github.com/JetBrains/kotlin

Kotlin官博https://blog.jetbrains.com/kotlin/

微信公眾號 Kotlin

Gradle文檔

https://docs.gradle.org/current/userguide/userguide.html

使用Kotlin進行Android開發

Kotlin非常適合開發Android應用程序,將現代語言的所有優勢帶入Android平臺,而不會引入任何新的限制:

兼容性:Kotlin與JDK 6完全兼容,確保Kotlin應用程序可以在較舊的Android設備上運行而不會出現問題。Android Studio完全支持Kotlin工具,并與Android構建系統兼容。

性能:由于非常相似的字節碼結構,Kotlin應用程序的運行速度與等效的Java應用程序一樣快。由于Kotlin支持內聯函數,使用lambda的代碼通常比使用Java編寫的相同代碼運行得更快。

互操作性:Kotlin與Java 100%互操作,允許在Kotlin應用程序中使用所有現有的Android庫。這包括注釋處理,因此數據綁定和Dagger也可以工作。

足跡:Kotlin有一個非常緊湊的運行時庫,可以通過使用ProGuard進一步減少。在實際應用程序中,Kotlin運行時只添加幾百個方法,小于.apk文件大小的100K。

編譯時間:Kotlin支持高效的增量編譯,因此雖然對于干凈的構建有一些額外的開銷,但增量構建通常比使用Java快或快

學習曲線:對于Java開發人員來說,使用Kotlin非常容易。Kotlin插件中包含的自動Java to Kotlin轉換器有助于完成第一步。Kotlin Koans通過一系列互動練習提供語言主要功能的指南。

Kotlin for Android案例研究

Kotlin已成功被大公司采用,其中一些公司已經分享了他們的經驗:

Pinterest已成功將Kotlin引入其應用程序,每月由1.5億人使用。

Basecamp的Android應用程序是100%Kotlin代碼,他們報告程序員的快樂和工作質量和速度的巨大改進的巨大差異。

Keepsafe的App Lock應用程序也已轉換為100%Kotlin,導致源代碼數減少30%,方法數減少10%。

Android開發工具

Kotlin團隊為Android開發提供了一套超越標準語言功能的工具:

Kotlin Android Extensions是一個編譯器擴展,允許您擺脫findViewById()代碼中的調用,并用合成編譯器生成的屬性替換它們。

Anko是一個庫,提供圍繞Android API的一組Kotlin友好包裝器,以及一個允許您使用Kotlin代碼替換布局.xml文件的DSL。

kotlin的小特點

kotlin支持類型推斷

var表示變量? val表示常量

fun表示方法

類的繼承和實現使用? ? :

kotlin的每個句子不需要 加分號 ;

空指針安全? 空指針(nullpointerexception或NPE)是我們使用Java最常見的崩潰,所以我們在Java中會寫許多防御性的代碼:

在kotlin中空指針的解決

在類型處理上,在類型的后面加上? ?? 表示這個變量參數賦值為null或者返回null

對于一個可能是null的變量或者參數,在調用對象方法或者屬性之前,需要加上? ?,否則編譯沒有辦法通過,如圖。關于空指針安全的原理,可以參考這篇文章研究學習Kotlin的一些方法。

支持方法的擴展

很多時候,framework提供給我們的API往往都是比較原子的,調用的適合需要進行組合處理,因為會產生一些util類,一個簡單的例子,我們想要更快的去展示一個toast信息,在Java中

在kotlin中我們只需要重寫擴展方法就可以了,

注意:kotlin的方法擴展并不是真正修改了對應的類文件,而是在編譯器和IDE方面做了處理,使我們看起來更像是擴展方法。

Lambda,高階函數,Streams API,函數式編程支持

所謂的lambda表達式是匿名函數,這使得我們的代碼會更加簡單,

高階函數通俗的講就是可以接受函數作為參數,也可以返回函數作為結果

舉一個接受函數作為參數的例子,在Android開發中,我們經常的使用sharedpreference來存儲數據,如果忘記調用apply或者commit則數據修改是不能應用,利用kotlin中的高階函數的功能可以解決這個問題。同時也使用了方法擴展這個特性。

kotlin支持streams API和方法的引用,使函數式編程更加的方便,下圖就是結合jsoup,來抓取某個proxy網站的數據,代碼更加簡單,實現起來也快速。

字符串模板

無論是 Java 還是 Android 開發,我們都會用到字符串拼接,比如進行日志輸出等等。在 Kotlin 中,字符串模板是支持的,我們可以很輕松的完成一個字符串數組的組成。

注意:關于字符串拼接可以參考這篇文章Java細節:字符串的拼接。

與 Java 交互性好

Kotlin 和 Java 都屬于基于 JVM 的編程語言。Kotlin 和 Java 的交互性很好,可以說是無縫連接。

這表現在:

Kotlin 可以自由的引用 Java 的代碼,反之亦然。

Kotlin 可以現有的全部的 Java 框架和庫

Java 文件可以很輕松的借助 IntelliJ 的插件轉成 kotlin

Kotlin 應用廣泛? Kotlin 對 Android 應用開發支持廣泛,諸多工具,比如 kotterknife(ButterKnife Kotlin 版),RxKotlin,Anko 等等,當然還有已經存在的很多 Java 的庫都是可以使用的。

除此之外,Kotlin 也可以編譯成 Java。最近使用 Kotlin 寫了一段抓取 proxy 的代碼,實現起來非常快捷。甚至比純 Java 實現起來要快很多。

相比Java 7的優勢到底是什么呢?

它更加易表現:這是它最重要的優點之一。你可以編寫少得多的代碼。

它更加安全:Kotlin是空安全的,也就是說在我們編譯時期就處理了各種null的情況,避免了執行時異常。如果一個對象可以是null,則我們需要明確地指定它,然后在使用它之前檢查它是否是null。你可以節約很多調試空指針異常的時間,解決掉null引發的bug。

它是函數式的:Kotlin是基于面向對象的語言。但是就如其他很多現代的語言那樣,它使用了很多函數式編程的概念,比如,使用lambda表達式來更方便地解決問題。其中一個很棒的特性就是Collections的處理方式。

它可以擴展函數:這意味著我們可以擴展類的更多的特性,甚至我們沒有權限去訪問這個類中的代碼

它是高度互操作性的:你可以繼續使用所有的你用Java寫的代碼和庫,因為兩個語言之間的互操作性是完美的。甚至可以在一個項目中使用Kotlin和Java兩種語言混合編程。

關于性能

Kotlin 的執行效率和 Java 代碼的執行效率理論上一致的。有時候 Kotlin 可能會顯得高一些,比如 Kotlin 提供了方法的 inline 設置,可以設置某些高頻方法進行 inline 操作,減少了運行時的進棧出棧和保存狀態的開銷。

關于轉向 Kotlin

其實,我在做決定之前也曾有過考慮,是不是選擇了 Kotlin 就意味著放棄 Java 呢,冷靜下來想一想,其實并不是那么回事,因為 Kotlin 與 Java 語法太相近,以及在 Kotlin 中無時無刻不在和 Java 相關的東西打交道,所以這點顧慮不是問題的。

對于個人的項目來轉向 Kotlin,通常不是很難的選擇,畢竟 Kotlin 是那么優秀的語言,相信很多人還是愿意嘗試并使用這個事半功倍的語言的。

而比較難抉擇的情況是如果如何讓團隊轉用 Kotlin,個人認為團隊難以轉用的原因有很多,比如學習成本,歷史包袱等等。但其實根本原因還是思維方式的問題,歪果仁喜歡用工具來提升開發效率,因為人力成本很高。而國內團隊提高效率的辦法通常是增加成員。好在 Flipboard 美國團隊自 2015 年(可能更早)就引入了 Kotlin,因此中國團隊這邊選用 Kotlin 也更加順水推舟。當然更主要的是目前團隊規模不大,成員一致認可 Kotlin 的優點。

關于團隊轉用 Kotlin 的方法,一般比較行得通的辦法是自上而下的推行。這就意味著要么直接的技術負責人比較開明要么就是需要有人來不斷推介來影響團隊。

現在好了,有了 Google 的支持,Kotlin 轉 Android 相信在不久的將來就會全面展開。篡改 Python 的一句名言「人生苦短,我用 Kotlin」,這樣一個高效實用的語言應該會被越來越多的團隊所接受,并應用到開發生產中。當然也希望在國內環境下大放異彩。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,460評論 6 538
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,067評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,467評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,468評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,184評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,582評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,616評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,794評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,343評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,096評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,291評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,863評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,513評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,941評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,190評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,026評論 3 396
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,253評論 2 375