在2017年5月的I/O大會上,Google突然宣佈,Kotlin成為開發Android的一級程式語言,從這一刻開始,開發Android App可以使用兩種語言:Java和Kotlin。
本書分3部分講解Kotlin,第1部分(第1~11章)是Kotlin語言的基礎部分,主要介紹Kotlin的基礎知識、語法及大量「語法糖」,如搭建Kotlin開發環境、資料類型、控制流、類、物件、介面、擴展、委託、Lambda運算式、操作符重載等。第2部分(第12~15章)主要介紹如何用Kotlin開發Android App。由於Kotlin可以調用JDK中的API,所以在使用Kotlin開發Android App的過程中,很多都是呼叫JDK的API實現的,但開發語言使用的是Kotlin。因此,詳細介紹用Kotlin開發Android App 需要掌握的核心知識,如Activity、組件、佈局、流檔、SQLite資料庫、網路等技術。第3部分(第16章)是一個完整的案例:歐瑞天氣,可以讓讀者瞭解利用Kotlin開發Android App的全過程。
適用:Kotlin同好學習、程式設計師閱讀,也可以作為大專院校和教育訓練機構的教材。
作者簡介:
李寧
歐瑞科技創始人,極客起源IT問答社區(https://geekori.com)創始人,歐瑞學院金牌講師,電腦碩士。擁有近20年軟體發展經驗,10年企業內訓經驗。CSDN博客專家、CSDN學院簽約講師、51CTO學院特級講師。一直從事JavaScript、Node.js、Java、Kotlin、Python、Android、iOS、C 、Hadoop、Spark、深度學習的開發和技術指導工作。對國內外相關領域的技術、理論和實踐有很深的理解和研究,出版過多本IT暢銷書。
作者序
前言
Android到現在已經發展10年了,從最初不怎麼增強發展到現在,形成一個由成千上萬的App支撐,可以執行在包含手機、平板電腦、電視、汽車、手錶、無人機在內的幾乎所有智慧裝置中的完整生態系統,這一切足以讓Android的擁有者Google感到無比自豪。
不過有一件事一直讓Google「很不爽」,那就是開發Android App的核心語言Java並不屬於Google,而屬於Oracle。而且Oracle一直在和Google打關於Java的「官司」,儘管Google贏得「官司」,但也讓Google清楚地看到,如果程式語言不掌握在自己的手裡,那麼總會受制於人,所以Google在數年時間裡進行多次嘗試,如推出Go語言。不過Go語言和C++類似,並不適合開發Android App。所以2017年5月之前,開發Android App的主要程式語言仍然是Java。
然而在2017年5月的I/O大會上,Google突然宣佈,Kotlin成為開發Android的一級程式語言,這就表示,從這一刻開始,開發Android App可以使用兩種語言:Java和Kotlin。
那麼Kotlin是什麼呢?就在2017年5月的I/O大會之前,我也不太清楚這個世界上還有一種叫Kotlin的程式語言,相信大多數讀者和我一樣。其實與Kotlin類似的語言有很多,如Scala,它們都是以JVM為基礎的語言,也就是說,Kotlin和Scala一樣,都只提供了編譯器,沒有提供執行環境。執行Kotlin和Scala程式,需要將原始程式碼編譯成Byte Code,然後在JVM上執行。
在剛開始接觸Kotlin時,我感到很奇怪,現在以JVM為基礎的語言非常多,舉例來說,撰寫Spark的Scala語言,還有Groovy、JRuby、Clojure等, Google為什麼獨偏愛Kotlin呢?隨著我對Kotlin的深入接觸,逐漸對Google選擇Kotlin的決定表示認可!
Kotlin作為第二種開發Android App的核心程式語言,一定是與Java有很大差異的,而且這種差異是要彌補Java的不足或增強Java的功能。所以要求都是正向的差異。
Java儘管歷史悠久,應用許多,但也有很多不足的地方,舉例來說,我們經常會遇到NullPointerException異常,這是個很討厭的異常,產生異常的是因為存取了空白物件的成員。Kotlin巧妙地解決這個問題,讓存取空白物件的成員不再拋出例外,而是直接傳回NULL。Kotlin除了解決Java的遺留問題外,還加很多「語法糖」,舉例來說,Kotlin支援擴充和運算符號多載,這是兩個非常大的「語法糖」。透過擴充,可以在沒有原始程式碼的情況下,為類別增加方法和屬性,透過運算符號多載,可以讓特定的類型支援原來沒有的操作,如為字串類型增加乘法和除法。總之,Kotlin單憑語言本身就比Java酷了不少。不過這些理由並不足以讓Google對Kotlin如此偏愛,因為其他同類語言,如Scala,也同樣增加了很多「語法糖」。
Kotlin還有什麼其他特性呢?其實Kotlin不僅可以在JVM上執行,還可以直接將Kotlin原始程式碼轉為JavaScript。這樣一來,從理論上講,Kotlin可以在任何支援JavaScript的環境中執行,如Web應用、React Native(Android和iOS)、微信公眾號、微信小程式、Node.js、Chrome外掛程式等。另外,還有一些地方是JavaScript做不到的,如開發本機應用。但Kotlin可以做到,Kotlin不僅可以產生JavaScript程式,還可以直接編譯成本地程式,如Windows的exe檔案、iOS App等,這樣一來,Kotlin幾乎可以開發所有類型的應用了。所以從理論上來講,Kotlin才是真正的跨平台語言,Kotlin可以直接或間接地開發各種類型的應用。
說了這麼多,相信大家一定已經清楚了Kotlin的強大,以及Google為什麼選擇Kotlin的原因,當然,除了技術原因外,選擇Kotlin還有一個原因,就是Google的Android Studio是以IntelliJ IDEA為基礎的社區版本開發的,而JetBrains公司開發了IntelliJ IDEA和Kotlin。可以說Android Studio和Kotlin是師出同門,這樣它們之間更容易相容。
既然Kotlin這麼強大,而且選擇Kotlin的理由非常多,如開發效率高、語法優美、能跨平台開發、獲得Google的強力支援。我們還等什麼呢!趕緊透過本書將Kotlin的知識裝進我們的大腦才是正確的做法!
本書適合Kotlin同好學習、程式設計師閱讀,也可以作為大專院校和教育訓練機構的教材。
前言
Android到現在已經發展10年了,從最初不怎麼增強發展到現在,形成一個由成千上萬的App支撐,可以執行在包含手機、平板電腦、電視、汽車、手錶、無人機在內的幾乎所有智慧裝置中的完整生態系統,這一切足以讓Android的擁有者Google感到無比自豪。
不過有一件事一直讓Google「很不爽」,那就是開發Android App的核心語言Java並不屬於Google,而屬於Oracle。而且Oracle一直在和Google打關於Java的「官司」,儘管Google贏得「官司」,但也讓Google清楚地看到,如果程式語言不掌握在自己的手裡,那麼總會受制於人,所以Google在數年時間...
目錄
前言
第1章 Kotlin開發環境架設
1.1 Kotlin概述
1.2 線上執行Kotlin程式
1.3 安裝和設定Kotlin
1.4 測試Kotlin編譯和執行環境
1.5 Kotlin中的語法糖
1.6 Kotlin的整合式開發環境(IDE)
1.7 小結
第2章 Kotlin基礎知識
2.1 Kotlin的基本語法
2.2 基礎資料類型
2.3 套件(Package)
2.4 控制流
2.5 小結
第3章 類別和介面
3.1 類別的宣告
3.2 建置元
3.3 類別成員
3.4 修飾符號(Modifiers)
3.5 類別的繼承
3.6 介面
3.7 抽象類別
3.8 小結
第4章 列舉類別和擴充
4.1 列舉類別
4.2 擴充
4.3 小結
第5章 資料類別和封閉類別
5.1 資料類別(Data Class)
5.2 封閉類別(Sealed Classes)
5.3 小結
第6章 泛型
6.1 泛型基礎
6.2 類型變異
6.3 類型投射
6.4 星號投射
6.5 泛型函數
6.6 泛型約束
6.7 小結
第7章 物件和委派
7.1 物件
7.2 委派
7.3 標準委派
7.4 小結
第8章 高階函數與Lambda運算式
8.1 高階函數
8.2 Lambda運算式與匿名函數
8.3 小結
第9章 函數
9.1 函數基本用法
9.2 使用中綴標記法呼叫函數
9.3 單運算式函數
9.4 函數參數和傳回值
9.5 函數的範圍
9.6 泛型函數
9.7 內聯函數
9.8 小結
第10章 其他Kotlin技術(1)
10.1 資料解構
10.2 集合
10.3 值範圍
10.4 類型檢查與類型轉換
10.5 this運算式
10.6 相等判斷
10.7 運算符號多載
10.8 小結
第11章 其他Kotlin技術(2)
11.1 null值安全性
11.2 異常類別
11.3 註釋(Annotations)
11.4 反射(Reflection)
11.5 小結
第12章 Android的視窗——Activity
12.1 什麼是Activity
12.2 Activity的基本用法
12.3 使用Intent連接多個Activity
12.4 向Activity中傳遞資料
12.5 從Activity傳回資料
12.6 Activity的生命週期
12.7 記錄目前活動的Activity
12.8 小結
第13章 Android App的裝飾工具:UI元件與版面配置
13.1 如何撰寫程式介面
13.2 常用的UI元件
13.3 版面配置詳解
13.4 小結
第14章 永久儲存資料的方式:持久化技術
14.1 SharedPreferences儲存
14.2 檔案流操作
14.3 App許可權的授予和拒絕
14.4 讀寫JSON格式的資料
14.5 SQLite資料庫
14.6 小結
第15章 連接外部世界——網路技術
15.1 WebView元件
15.2 使用HTTP與服務端進行互動
15.3 小結
第16章 專案實戰——歐瑞天氣App
16.1 專案概述
16.2 增加依賴
16.3 實現主視窗
16.4 顯示地區清單
16.5 顯示天氣資訊
16.6 小結
前言
第1章 Kotlin開發環境架設
1.1 Kotlin概述
1.2 線上執行Kotlin程式
1.3 安裝和設定Kotlin
1.4 測試Kotlin編譯和執行環境
1.5 Kotlin中的語法糖
1.6 Kotlin的整合式開發環境(IDE)
1.7 小結
第2章 Kotlin基礎知識
2.1 Kotlin的基本語法
2.2 基礎資料類型
2.3 套件(Package)
2.4 控制流
2.5 小結
第3章 類別和介面
3.1 類別的宣告
3.2 建置元
3.3 類別成員
3.4 修飾符號(Modifiers)
3.5 類別的繼承
3.6 介面
3.7 抽象類別
3.8 小結
第4章 列舉類別和擴充
4.1 列舉類別
4...