1. 程式人生 > >Kotlin VS Java:基本語法差異(轉載)

Kotlin VS Java:基本語法差異(轉載)

允許 接收 point this view 學習 替換 同時 ons

5月18號,goole宣布Kotlin成為官方支持的開發語言以來,Kotlin語言社區,公眾號,qq群等全面轟炸,本文是一篇譯文,來自國外的一個用戶,將給大家介紹,基礎語法部分Kotlin和java之間的差異,對於使用java開發android的大牛們來說可以做個基本的比較。

1. Kotlin,do less,get more

Kotlin的一個主要優點是它的簡潔。 你用更少的代碼獲得更多的功能。 而你寫的代碼越少,你犯的錯誤就越少。 這很簡單。 讓我們看看Kotlin的基礎知識,從類開始。

技術分享

技術分享

技術分享

技術分享

上面是一個通常的Java類。 它做的不多。 它只包含一些數據。 但是,當你意識到它給表帶來的不足時,看看這段代碼有多大是很痛苦的。 為了鼓勵你,我們會給你一個等同的類寫在Kotlin。

技術分享

是的,你會為你的數據類自動獲取需要的getters,setters,e quals(),hashcode(),toString()和copy()函數! 當然,你可以輕松地重寫這些函數,但在大多數情況下,只需聲明類及其屬性就足夠了。

這正是我們的意思,當我們說Kotlin簡潔。

2. avoid NullPointerException

現在我們想提醒你在許多編程語言中最大的痛苦 - 空指針異常。 我們幾乎不能想象自從托尼·霍爾在1965年發明它之後,有多少開發者遭受了空指針,同時試圖使事情更簡單一些。

可悲的是,我們不能及時回來,防止Tony犯這個錯誤。 但是使用Kotlin,我們現在可以輕松地轉義NullPointerException。

技術分享

如果變量是可空的,編譯器將不允許你訪問它沒有適當的檢查。 Kotlin強迫你使用? 運算符。 這可以防止應用程序自動崩潰。
它如何在引擎蓋下工作? 讓我們回顧一下生成的字節碼。

技術分享

正如你所看到的,我們在這裏有相同的空檢查。 JetBrains的開發人員(創建Kotlin)知道每次檢查我們的變量是避免NullPointerException的唯一方法。 但他們也知道Android開發人員不想在他們的項目中處理NullPointerException。 他們可能想:“為什麽不自動生成這個檢查如果變量是可空的?

JetBrains的開發人員只是這樣,讓我們的生活更容易了!

3. cast off utils(擺脫工具類)

讓我們來討論一下有關使用util類的醜陋事情。 你有沒有一個項目沒有他們? 我們幾乎不記得這一切。 Kotlin有一個聰明的解決方案 - 擴展功能 - 幫助你擺脫所有的util類一勞永逸。

擴展函數幾乎是一個通常的Kotlin函數。 但是當你聲明它,你需要指定的實例將具有擴展功能的類。

技術分享

註意‘this‘,我們作為參數傳遞給makeText()方法? 它不是類的一個實例,我們聲明這個函數,而是一個Context實例。 現在你可以直接從你的Activity或任何其他Context實例調用這個函數。 例如:

技術分享

你應該記住,擴展函數不以任何方式修改它擴展的類。 那麽它如何工作而不改變原來的類? 讓我們再次看到字節碼。

技術分享

哈! 您的函數隱式接收它作為第一個參數擴展的類的實例。 因此,在字節碼中,對函數體中“this”的任何訪問都將替換為對第一個參數的訪問。 沒有魔法真的。 您可以在項目的任何位置使用此函數。
時間刪除你的util包!

4. 你可以忘記視圖綁定

你還記得findViewById()method()嗎? 我們相信你不喜歡它。 我們也不是。 此外,我們不想為我們需要訪問的每個視圖聲明變量和Butterknife註釋。

你可以忘記與Kotlin Android Extensions的視圖綁定。 不再需要創建變量和綁定視圖。 您可以使用在xml布局中聲明的標識符直接訪問您的視圖。

技術分享

技術分享

這太簡單了,不是嗎?


基本上,findViewById()方法仍在使用中。 但是沒有必要自己寫。 Kotlin會為你做。

當您使用Android擴展時,findCachedViewById()函數和HashMap實例將會自動生成。 每次通過其標識符訪問您的視圖將被一個新的函數調用替換。 如果是第一次訪問視圖,此函數將調用通常的findViewById()函數,並將接收的視圖添加到HashMap中,以便在下次訪問視圖時從中檢索視圖。

5. 你可以更容易地使用集合

讓我們談談Kotlin的集合。 因為我們經常需要使用數據模型集合執行困難的操作。 例如,我們可能有一個學生名單,我們需要從中檢索三個A級成績的學生和兩個B成績的學生。


看看Kotlin的解決方案:

技術分享

下面是我們如何解決Java中的同樣的問題:

技術分享

這只是一個小例子,說明如何在Kotlin和Java中使用集合,但你可以看到差別! 你能想象如果我們處理一個大項目的集合,Kotlin會有什麽區別嗎?

譯者序:Kotlin相對於java的最大的優勢,就是簡潔,但是java9出來以後,一些繁瑣的問題應該會得到一定的解決,同時如果現階段使用Kotlin去開發android,常用的框架等等就不能使用了,但是學習Kotlin還是有必要的,Kotlin的語言風格更現代化,語法直接繼承ActionScript,以現代化的風格,解決Java多年的陳舊問題,省去了使用各類生態工具的麻煩,將主流編程語言向前推動了一步,不再固守於C時代的語法形式。隨著Kotlin的不斷完善將來會成為和java相媲美的優秀的android開發語言。

Kotlin VS Java:基本語法差異(轉載)