
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大佬學習筆記等等,這些內容均免費分享給大家,需要完整版的朋友,點這里可以看到全部內容,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/253523.html
標籤:其他
下一篇:改善C#代碼的有效方法
