字節+谷歌超全Kotlin學習王炸筆記!Kotlin入門到精通+高級Kotlin強化實戰(附Demo)

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實現起來並不友好。

當然後面有了RxJava來進行補救,不過Kotlin做的似乎要更好一點。(這裏就不討論Kotlin的集合框架架構了)

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筆記

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

二、谷歌大佬編寫高級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) -> D
    • HTML Kotlin DSL 實戰
  • Kotlin 泛型
    • 遙控器的故事:泛型
    • 招聘的故事:泛型的不變性(Invariant)
    • 搞定招聘:泛型的協變(Covariant)
    • 填志願的故事:泛型的逆變(Contravariant)
    • 使用處型變(Use-site Variance)
    • Kotlin 泛型實戰
  • Kotlin 擴展
    • 擴展是什麼?
    • 頂層擴展 (Top Level Extension)
    • 頂層擴展的原理是什麼?
    • 類內擴展 (Declaring extensions as members)
    • 擴展函數 + SharedPreferences
    • 擴展函數 + Spannable
  • Kotlin 委託
    • 委託類(Class Delegation)
    • 委託屬性(Property Delegation)
    • 自定義委託屬性
    • 委託屬性 + SharedPreferences
  • 協程“不爲人知”的調試技巧
    • 協程 JVM 參數
    • Kotlin 1.4 協程調試
  • 圖解協程:suspend
    • 線程 & 協程
    • 異步代碼 & 回調地獄
    • suspend 的本質
    • CPS 轉換
    • 字節碼反編譯
    • 協程狀態機動畫演示

點擊查看:高級Kotlin強化實戰(附Demo)

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

最後還有耗時一年多整理的一系列Android學習資源:Android源碼解析、Android第三方庫源碼筆記、Android進階架構師七大專題學習、歷年BAT面試題解析包、Android大佬學習筆記等等,這些內容均免費分享給大家,需要完整版的朋友,點這裏可以看到全部內容

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章