首頁>技術>

Android開發者必須要知道的Kotlin

Android開發者在語言限制方面面臨著一個困境。眾所周知,目前Android開發所用的Java語言比較臃腫,這極大地降低了我們的生產力,同時也迫使我們不得不編寫大量的樣板與脆弱的程式碼,然而這樣的程式碼是難以閱讀和維護的。幸運的是,Android程式是執行在Java虛擬機器之上的,因此從技術上來說,可以執行在JVM之上的一切都可用於開發Android應用。現在已經有很多可以生成JVM能夠執行的位元組碼的語言,其中一些語言開始嶄露頭角並逐步流行起來,Kotlin就是其中的佼佼者。

何為Kotlin?

Kotlin 是一種在 Java 虛擬機器上執行的靜態型別程式語言,被稱之為 Android 世界的Swift,由 JetBrains 設計開發並開源。

Kotlin 可以編譯成Java位元組碼,也可以編譯成 JavaScript,方便在沒有 JVM 的裝置上執行。

在Google I/O 2017中,Google 宣佈 Kotlin 成為 Android 官方開發語言。

為何說Kotlin非常適合於Android?

基本上,這是因為Kotlin的所有特性都非常適合於Android生態圈。Kotlin的庫非常小,我們在開發過程中不會引入額外的成本。其大小相當於support-v4庫,我們在很多專案中所使用的庫都比Kotlin大。除此之外,Android Studio(官方的Android IDE)是基於IntelliJ構建的。這意味著我們的IDE對該語言提供了非常棒的支援。我們可以很快就配置好專案,並且使用熟悉的IDE進行開發。我們可以繼續使用Gradle以及IDE所提供的各種執行與除錯特性。這與使用Java開發應用別無二致。歸功於互操作性,我們可以在Kotlin程式碼中使用Android SDK而不會遇到任何問題。實際上,部分SDK使用起來會變得更加簡單,這是因為互操作性是非常智慧的,比如說它可以將getters與setters對映到Kotlin屬性上,我們也可以以閉包的形式編寫監聽器。

如何在Android開發中使用Kotlin?

過程非常簡單,只需按照下面的步驟來即可:

從IDE plugins中下載Kotlin外掛在模組中建立Kotlin類使用“Configure Kotlin in Project…”開始編碼為什麼選擇 Kotlin?

簡潔:大大減少樣板程式碼的數量。安全:避免空指標異常等整個類的錯誤。互操作性:充分利用 JVM、Android 和瀏覽器的現有庫。工具友好:可用任何 Java IDE 或者使用命令列構建。

Kotlin 在Android開發中那些讓人舒適的地方

1.字元模板

開發中難免需要根據多個欄位去拼接一條字串做展示,在過長或者過於複雜的資料邏輯的時候,用Java實現起來都過於冗長。Kotlin 使用 $ 放在變數名的前面去表達字串中的變數和表示式,從而簡化了這一過程。

2.空安全

在使用Java開發Android的過程中,避免不了大量的空安全判定程式碼,介於Kotlin要很好的相容Java,在這個問題上Kotlin設計一整套新的型別系統(這裡不作研究)來完善最佳化它。

所有的型別都分為可空和不可空型別,並且針對不可空型別強制要求初始化,在一開始就讓開發者高標準的、嚴謹的使用變數,是一種規範性的要求。但是可空型別可能會在程式中更廣泛的應用,針對這一點,Kotlin也有Elvis 運算子來進行安全訪問或者避免空值情況。

3.延遲載入

這一點可以說是對不可空型別的更進一步最佳化,開發中總有一些變數是在某些時機才會被初始化,而不是類載入的時候就載入。延遲載入是很好的東西,可以省去初始化的成本,在變數真正被需要的時候才被初始化。

4.方便易讀的迴圈

Kotlin有區間的概念,這個概念讓建立迴圈更加易讀方便。

5.強大易用的迭代器

遍歷集合是基操,對於一些稍微複雜一點的資料邏輯,Java實現起來並不友好。

6.預設引數

過載是很比較常見的操作,但是有時候這種方式會出現很多相同的模板程式碼。Kotlin的預設引數,可以給引數指定預設值,並且在呼叫的時候像給變數賦值一樣給引數賦值`而不用像Java一樣非要按照順序去傳值。

並且因為具有預設值的原因,所以呼叫的時候可以根據具體情況傳遞引數,更加靈活、更加易讀和簡潔。

7.Data Class

開發中Bean檔案是必不可少的,但是Java的Bean檔案大部分都是模版程式碼,雖然有外掛自動生成,但是依然會覺得比較繁瑣,Kotlin可以將這些類申明為Data類,這些類會預設實現equals(),hashCode(),toString() 和copy() 方法,從幾十行Java程式碼簡潔到幾行程式碼,Kotlin只用宣告 一個data class

8.簡短而強大的標準函式庫

這是Kotlin提供的函式庫,使用後會簡化不少的樣板程式碼。稍微不一樣的地方是它們的this和it各自指向不一樣,以及返回值得不一樣,使用得時候根據具體得情況來就可以了。

9.通吃的when

對於Java的Stwich再熟悉不過,但是它使用起來有比較多的限制,有時候面對複雜的邏輯會顯得乏力。

Kotlin的when表示式可以匹配幾乎任何東西(字面值,列舉,數字,範圍,型別,表示式,甚至函式(kotlin函式至上))。

10.擴充套件

11.簡單的Bundle 快速的Parcelable

一開始我並沒有注意到這個特性,因為專案是元件化開發,在跳轉傳值上都採用了ARouter,但是當我發現Kotlin對這個做的改造的時候還是非常開心~

小總結:如上所述,Kotlin在很多方面都簡化了Android的開發工作。它會提升你的生產力,並且可以透過非常不同且更加簡單的方式來解決一些常見的問題。

那麼我們該如何學習Kotlin呢?

如果你是因為缺少學習資料,而我正好薅到這本谷歌內部大佬根據實戰編寫的Kotlin寶典,從入門到精通,教程通俗易懂,例項豐富,既有基礎知識,也有進階技能,能夠幫助讀者快速入門,是你學習Kotlin的葵花寶典,快收藏起來!!!

今天分享的一共分為兩部分:位元組跳動廠內部超高質量Kotlin筆記、谷歌大佬編寫高階Kotlin強化實戰(附Demo)。

一、位元組跳動廠內部超高質量Kotlin筆記

首先目錄乘上:

1.準備開始

主要內容:基本語法、習慣用語、編碼風格

2.基礎

主要內容:基本型別、包、控制流、返回與跳轉

3.類和物件

主要內容:類和繼承、屬性和欄位、介面、可見性修飾詞、擴充套件、資料物件、泛型、巢狀類、列舉類、物件表示式和宣告、代理模式、代理屬性

4.函式和lambda表示式

主要內容:函式、高階函式與 lambda 表示式

5.其它

主要內容:多重申明,Ranges,型別檢查和自動轉換,This表示式,等式,運算子過載,空安全,異常,註解,反射,動態型別

6.互用性

主要內容:動態型別

7.工具

主要內容:使用Maven、使用 Ant、使用 Gradle、使用Griffon

8.FAQ

主要內容:與java對比、與Scala對比

基礎知識掌握之後就是靠實戰提升了!

二、谷歌大佬編寫高階Kotlin強化實戰(附Demo)

照樣目錄乘上:

第一章 Kotlin 入門教程Kotlin 概述Kotlin 特點學習 Kotlin 的意義Kotlin 與 Java 比較列印日誌定義常量與變數null 宣告空判斷字串拼接三元表示式多重條件更靈活的 case 語句for 迴圈更方便的集合操作遍歷方法定義constructor 構造器Get Set 構造器運算子換行巧用 Android Studio為已有基於 Java 的 Android 專案新增Kotlin 支援將 Java 檔案轉成 Kotlin 檔案認識 Kotlin 基本型別基本型別程式碼演練走進 Kotlin 的陣列Kotlin 陣列的建立技巧Kotlin 陣列的遍歷技巧陣列程式碼演練走進 Kotlin 的集合集合的可變性與不可變性集合排序集合中的 Set 與 Map集合問題完整程式碼基礎語法所有 Kotlin 類都是物件 (Everything in Kotlin is an object)可見性修飾符 (Visibility Modifiers)變數定義 (Defining Variables)空安全 (Null Safety)型別檢查與轉換 (Type Checks and Casts)if 判斷for 迴圈when相等性 (Equality)函式 (Functions)類 (Classes)繼承 (Inheritance)This 表示式 (Expression)資料類 (Data Class)擴充套件 (Extensions)委託 (Delegation)第二章 Kotlin 實戰避坑指南方法入參是常量,不可修改不要 Companion 、INSTANCE ?Java 過載,在 Kotlin 中怎麼巧妙過渡一下?Kotlin 中的判空姿勢Kotlin 複寫 Java 父類中的方法Kotlin “狠”起來,連TODO 都不放過!is、as` 中的坑Kotlin 中的 Property 的理解also 關鍵字takeIf 關鍵字單例模式的寫法第三章 專案實戰《Kotlin Jetpack 實戰》從一個膜拜大神的 Demo 開始簡介工程結構Kotlin 寫 Gradle 指令碼是一種什麼體驗?Kotlin 編寫 Gradle 指令碼的優勢實戰前的準備開始重構Kotlin DSL 實戰--依賴管理Kotlin 程式設計的三重境界前期準備為工程新增 Kotlin 支援Kotlin 高階函式函式型別,高階函式,Lambda,它們分別是什麼?為什麼要引入 Lambda 和 高階函式?帶接收者(Receiver)的函式型別:A.(B,C) -> DHTML Kotlin DSL 實戰Kotlin 泛型遙控器的故事:泛型招聘的故事:泛型的不變性(Invariant)搞定招聘:泛型的協變(Covariant)填志願的故事:泛型的逆變(Contravariant)使用處型變(Use-site Variance)Kotlin 泛型實戰Kotlin 擴充套件擴充套件是什麼?頂層擴充套件 (Top Level Extension)頂層擴充套件的原理是什麼?類內擴充套件 (Declaring extensions as members)擴充套件函式 + SharedPreferences擴充套件函式 + SpannableKotlin 委託委託類(Class Delegation)委託屬性(Property Delegation)自定義委託屬性委託屬性 + SharedPreferences協程“不為人知”的除錯技巧協程 JVM 引數Kotlin 1.4 協程除錯圖解協程:suspend執行緒 & 協程非同步程式碼 & 回撥地獄suspend 的本質CPS 轉換位元組碼反編譯協程狀態機動畫演示

由於篇幅較長,就暫時只展示這些。

最後還有耗時一年多整理的一系列Android學習資源:Android原始碼解析、Android第三方庫原始碼筆記、Android進階架構師七大專題學習、歷年BAT面試題解析包、Android大佬學習筆記等等,這些內容均免費分享給大家,需要完整版的朋友,私信回覆【資料】一鍵領取!!!

9
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • JDK原始碼深度學習!阿里P9架構師終於總結出了這份“原始碼級”的筆記了