1. 程式人生 > >Android 使用Kotlin開發(一)

Android 使用Kotlin開發(一)

本文為自己學kotlin時的一些筆記

Kotlin的特色

Kotlin作為Java的改良,在Android開發中有很多優勢,我們先從相對直觀的介面繪製開始瞭解,然後看看Kotlin的語法特點,再慢慢去接觸更深層次的程式設計思想。

簡化findViewById

我們知道,Android的架構裡,xml佈局檔案和Activity是鬆耦合的,Activity中要使用介面元素,必須藉助R檔案對xml控制元件的記錄,用findViewById找到這個元素。

在Kotlin中我們可繼續使用findViewById去繫結xml佈局中的控制元件:(TextView)findViewById(R.id.hello);

進一步引用Anko之後,可以使用find函式去繫結控制元件:find(R.id.hello),不需要型別轉換

同時,Kotlin還提供一種更激進的方法,通過在gradule中引用applyplugin:’kotlin-android-extensions’,徹底取消findViewById這個函式,具體做法如下:

首先,在app的gradule中,新增引用

這裡寫圖片描述

然後,在Activity中直接根據id使用介面元素

這裡寫圖片描述

按住Ctrl鍵,會提示我們這個控制元件詳情

這裡寫圖片描述

點選後,可以直接跳轉到xml檔案中的控制元件位置,游標會停留在Id處

這裡寫圖片描述

這種特性令人聯想起C#語言中對介面控制元件的管理,在C#裡,介面的控制元件可以直接呼叫,不需要find,這是因為在建立一個Form1.cs介面檔案時,IDE會自動建立一個對應的額Form1.designer.cs類,在這個類裡,自動管理所有介面控制元件的物件。

Kotlin也是類似的思路,它會遍歷你的xml檔案,建立對應的虛擬包給你引用(用Alt+Enter引用),我們使用的控制元件物件,其實是這個虛擬包裡的控制元件物件。

這裡寫圖片描述

Kotlin的語法特點

1.在kotlin語法裡,程式碼行不需要“;”結尾。

2.重要的 “:
在java裡,主要在運算子裡出現(for switch 三元)

在kotlin中 的地位大大提升了,他的用途非常廣泛

定義變數型別

var name:String=”my name” //變數name為String型別

定義引數的型別

fun makeTool(id:Int){ //引數id為Int型別}

定義函式的返回值

fun getAddr(id:Int):String{ //返回值為String型別}

宣告類/介面的繼承

class KotlinActivityUI :AnkoComponent{//繼承AnkoComponent介面

來使用Java類

val intent = Intent(this, MainActivity::class.java) //需要用::來使用Java類,注意是兩個“”

3.沒有new
kotlin來例項化一個物件不需要new

var list=ArrayList()

4.變數常量型別推斷

var定義變數

var name:String=”my name”

val定義常量(相當於final)

val TAG:String=”ClassName”

由於kotin可以型別推斷上面的2個例子可以簡化成

var name=”my name”

val TAG=”ClassName”

5.初始化和延遲載入

在java裡我們可以自己定義一個變數,但是並不賦值(int和boolean會有預設值)

但是kotlin必須為變數賦值,如果只寫一個變數 卻不賦值 如下

var name

編譯器會報錯,提示你未初始化,你必須賦值0或者null,或者別的一些值

不過有時候我們並不能在定義變數時就初始化他,比如我們在Android中定義一個view控制元件,或者預定義一個介面卡,我們只有在onCreateView()的時候才初始化

針對這種情況,kotlin提供了懶載入lazy機制來解決這個問題,在懶載入機制裡,變數只有在第一次使用時才會初始化,可以這樣寫

這裡寫圖片描述

lazy只適用於val物件,對於var物件,需要使用lateinit

這裡寫圖片描述

6.空指標安全
在kotlin裡可以用“?”表示可以為空 用“!!”表示不可以為空
空指標安全並不是不需要處理空指標,你用“”宣告的某個變數時可以為空的

var num:Int?=null

宣告允許為空時,不能使用型別推斷,必須宣告其資料型別

空指標雖然安全了,但是需要視情況而定,有時候可以為空 有時候做資料檢查,有時候丟擲異常

val v1 =num?.toInt() //不做處理返回 null

val v2 =num?.toInt() ?:0 //判斷為空時返回0

val v3 =num!!.toInt() //丟擲空指標異常(用“!!”表示不能為空)

7.定義函式
在kotlin中可以這樣定義函式

fun 方法名(引數名:型別,引數名:型別…) :返回型別{

}

所以可以這樣寫

這裡寫圖片描述

由於kotlin可以對函式的返回值進行型別推斷,所以經常使用“=”代替返回型別和“return”關鍵字 上面的程式碼可以寫成

這裡寫圖片描述

如果我們的函式程式碼只有一行可以簡化成

這裡寫圖片描述

函式也可以空指標安全,在返回型別後面加“”即可

這裡寫圖片描述

有時候函式的型別為Unit 代表java的void 代表沒有返回

這裡寫圖片描述

在方法沒有返回值時 也可以不寫Unit

這裡寫圖片描述

8.用is代替了instance of

這裡寫圖片描述

9.in 區間 集合
在kotlin中有區間的概念 比如2..8就是2到8的整數區間

這裡寫圖片描述

也可以用in判斷集合是否包含某個元素
這裡寫圖片描述

for迴圈的使用方法

這裡寫圖片描述

可以倒序遍歷

這裡寫圖片描述

當然也可以反轉

這裡寫圖片描述

可以指定步長(即每次走多少)

這裡寫圖片描述

10.when代替了switch

這裡寫圖片描述

11.字串模板 在java中字串的可讀性較差

MessageFormat.format(“{0}xivehribuher{1}xhvihuehewogweg”,para0,para2);

在字串比較長時,你不知道字串要表達什麼

在kotlin中字串可讀性更好

這裡寫圖片描述

這篇文章就到這裡了 在後續的文章中將會對Kotlin的新特性 一 一介紹

在後續的文章中前三篇將會對Kotlin做一個詳細的講解(篇幅會有點大)

之後將會使用Kotlin寫幾個Android Demo並且會封裝一個網路請求庫

程式碼同步GitHub