5月18號,goole宣佈Kotlin成爲官方支持的開發語言以來,Kotlin語言社區,公衆號,qq羣等全面轟炸,本文是一篇譯文,來自國外的一個用戶,將給你們介紹,基礎語法部分Kotlin和java之間的差別,對於使用java開發android的大牛們來講能夠作個基本的比較。java
1. Kotlin,do less,get moreandroid
Kotlin的一個主要優勢是它的簡潔。 你用更少的代碼得到更多的功能。 而你寫的代碼越少,你犯的錯誤就越少。 這很簡單。 讓咱們看看Kotlin的基礎知識,從類開始。編程
上面是一個一般的Java類。 它作的很少。 它只包含一些數據。 可是,當你意識到它給錶帶來的不足時,看看這段代碼有多大是很痛苦的。 爲了鼓勵你,咱們會給你一個等同的類寫在Kotlin。框架
是的,你會爲你的數據類自動獲取須要的getters,setters,e quals(),hashcode(),toString()和copy()函數! 固然,你能夠輕鬆地重寫這些函數,但在大多數狀況下,只需聲明類及其屬性就足夠了。less
這正是咱們的意思,當咱們說Kotlin簡潔。編程語言
NullPointerException
如今咱們想提醒你在許多編程語言中最大的痛苦 - 空指針異常。 咱們幾乎不能想象自從託尼·霍爾在1965年發明它以後,有多少開發者遭受了空指針,同時試圖使事情更簡單一些。函數
可悲的是,咱們不能及時回來,防止Tony犯這個錯誤。 可是使用Kotlin,咱們如今能夠輕鬆地轉義NullPointerException。工具
若是變量是可空的,編譯器將不容許你訪問它沒有適當的檢查。 Kotlin強迫你使用? 運算符。 這能夠防止應用程序自動崩潰。
它如何在引擎蓋下工做? 讓咱們回顧一下生成的字節碼。佈局
正如你所看到的,咱們在這裏有相同的空檢查。 JetBrains的開發人員(建立Kotlin)知道每次檢查咱們的變量是避免NullPointerException的惟一方法。 但他們也知道Android開發人員不想在他們的項目中處理NullPointerException。 他們可能想:「爲何不自動生成這個檢查若是變量是可空的?學習
JetBrains的開發人員只是這樣,讓咱們的生活更容易了!
讓咱們來討論一下有關使用util類的醜陋事情。 你有沒有一個項目沒有他們? 咱們幾乎不記得這一切。 Kotlin有一個聰明的解決方案 - 擴展功能 - 幫助你擺脫全部的util類一勞永逸。
擴展函數幾乎是一個一般的Kotlin函數。 可是當你聲明它,你須要指定的實例將具備擴展功能的類。
注意'this',咱們做爲參數傳遞給makeText()方法? 它不是類的一個實例,咱們聲明這個函數,而是一個Context實例。 如今你能夠直接從你的Activity或任何其餘Context實例調用這個函數。 例如:
你應該記住,擴展函數不以任何方式修改它擴展的類。 那麼它如何工做而不改變原來的類? 讓咱們再次看到字節碼。
哈! 您的函數隱式接收它做爲第一個參數擴展的類的實例。 所以,在字節碼中,對函數體中「this」的任何訪問都將替換爲對第一個參數的訪問。 沒有魔法真的。 您能夠在項目的任何位置使用此函數。
時間刪除你的util包!
你還記得findViewById()method()嗎? 咱們相信你不喜歡它。 咱們也不是。 此外,咱們不想爲咱們須要訪問的每一個視圖聲明變量和Butterknife註釋。
你能夠忘記與Kotlin Android Extensions的視圖綁定。 再也不須要建立變量和綁定視圖。 您可使用在xml佈局中聲明的標識符直接訪問您的視圖。
這太簡單了,不是嗎?
基本上,findViewById()方法仍在使用中。 可是沒有必要本身寫。 Kotlin會爲你作。
當您使用Android擴展時,findCachedViewById()函數和HashMap實例將會自動生成。 每次經過其標識符訪問您的視圖將被一個新的函數調用替換。 若是是第一次訪問視圖,此函數將調用一般的findViewById()函數,並將接收的視圖添加到HashMap中,以便在下次訪問視圖時從中檢索視圖。
讓咱們談談Kotlin的集合。 由於咱們常常須要使用數據模型集合執行困難的操做。 例如,咱們可能有一個學生名單,咱們須要從中檢索三個A級成績的學生和兩個B成績的學生。
看看Kotlin的解決方案:
下面是咱們如何解決Java中的一樣的問題:
這只是一個小例子,說明如何在Kotlin和Java中使用集合,但你能夠看到差異! 你能想象若是咱們處理一個大項目的集合,Kotlin會有什麼區別嗎?
譯者序:Kotlin相對於java的最大的優點,就是簡潔,可是java9出來之後,一些繁瑣的問題應該會獲得必定的解決,同時若是現階段使用Kotlin去開發android,經常使用的框架等等就不能使用了,可是學習Kotlin仍是有必要的,Kotlin的語言風格更現代化,語法直接繼承ActionScript,以現代化的風格,解決Java多年的陳舊問題,省去了使用各種生態工具的麻煩,將主流編程語言向前推進了一步,再也不固守於C時代的語法形式。隨着Kotlin的不斷完善未來會成爲和java相媲美的優秀的android開發語言。