這篇講解下kotlin下Android開發的一些程式碼技巧,不講深入的,貼一下目前用的到覺得比較好的程式碼正規化,目前都找不到關於Android開發的一些好的kotlin最佳實踐,只能自己慢慢摸索了,寫下來希望有點用,寫的有問題的歡迎指正
apply的使用
當我們通過as提供的java轉kotlin的程式碼轉換時,預設為我們生成的是如下程式碼
通過優化程式碼,可以得到如下的使用正規化(建議使用下面這種)還可以看下這段程式碼
initUser()方法中初始化的操作可以優化為在Android開發中類似這樣的場景很多,我們在初始化一些資源的時候,可能還有一些相關的操作也需要一併處理,像上面的建立一個屬性動畫這樣的,需要設定一些狀態值,用apply是一種比較好的使用方式
let的使用
還是看一段程式碼
使用let後的程式碼
主要是去掉了?(可空判斷,因為我明明賦值了的,user物件不會是null的,user?.let{} 會先判斷user不為null,才執行let程式碼塊裡面的程式碼,僅僅只是語法糖的效果)
判斷多個物件在都是非空情況下執行某段邏輯
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
在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