kotlin開發經驗談4

xingstarx發表於2018-01-18

這篇講解下kotlin下Android開發的一些程式碼技巧,不講深入的,貼一下目前用的到覺得比較好的程式碼正規化,目前都找不到關於Android開發的一些好的kotlin最佳實踐,只能自己慢慢摸索了,寫下來希望有點用,寫的有問題的歡迎指正

apply的使用

當我們通過as提供的java轉kotlin的程式碼轉換時,預設為我們生成的是如下程式碼

image.png
通過優化程式碼,可以得到如下的使用正規化(建議使用下面這種)

image.png

還可以看下這段程式碼

image.png
initUser()方法中初始化的操作可以優化為

image.png

在Android開發中類似這樣的場景很多,我們在初始化一些資源的時候,可能還有一些相關的操作也需要一併處理,像上面的建立一個屬性動畫這樣的,需要設定一些狀態值,用apply是一種比較好的使用方式

let的使用

還是看一段程式碼

image.png

使用let後的程式碼

image.png

主要是去掉了?(可空判斷,因為我明明賦值了的,user物件不會是null的,user?.let{} 會先判斷user不為null,才執行let程式碼塊裡面的程式碼,僅僅只是語法糖的效果)

判斷多個物件在都是非空情況下執行某段邏輯

image.png

inline fun <A, B, R> ifAllNotNull(a: A?, b: B?, transform: (a: A, b: B) -> R) =
        if (a != null && b != null) transform(a, b) else null
複製程式碼

關鍵程式碼是ifAllNotNull,方法體裡面的邏輯做了判斷,如果都不為null,才會執行transform方法體的程式碼,kotlin的一大優勢就是可以把方法當做變數引數傳遞,真是吊吊的,函數語言程式設計

那麼三個變數不為null執行某段邏輯怎麼寫呢?可以改成這樣

inline fun <A, B, C, R> ifAllNotNull(a: A?, b: B?, c: C?, transform: (a: A, b: B, c: C) -> R) =
        if (a != null && b != null && c!= null) transform(a, b, c) else null
複製程式碼

更多的可以自己發揮了

定義函式變數

在以前的Android開發中,為了解耦合,我們都是定義介面實現通訊互動的,常見的就是各種XXXListener,那麼在kotlin中這種語言下,可以怎麼用呢?

這裡還是通過舉例子描述,一個listActivity,一個listFragment

image.png

image.png

在ListFragment裡面宣告瞭一個函式變數var onClickListener: ((parent: AdapterView<*>, view: View, position: Int, id: Long) -> Unit)? = null 形式就跟OnClickListener的程式碼類似,只不過是一個函式,在listView設定ItemClickListener事件中,呼叫onClickListener的邏輯,當然了這個邏輯由ListActivity(我們假設存在這樣的業務場景,肯定是有的,只不過暫時沒想到一個好的場景)實現,我們在listFragment裡面實現這樣的程式碼就可以了

listFragment?.onClickListener = {
            parent, view, position, id ->
            Toast.makeText(this, "Hello 來自ListActivity", Toast.LENGTH_SHORT).show()
        }
複製程式碼

暫時就講這麼多了,越用越覺得有趣... O(∩_∩)O哈哈~

參考資料 helloKotlin

相關文章