Lambda運算式在Kotlin中怎樣工作的:setOnClickListener的轉換(KAD 18),180

來源:互聯網
上載者:User

Lambda運算式在Kotlin中怎樣工作的:setOnClickListener的轉換(KAD 18),180

作者:Antonio Leiva

時間:Mar 28, 2017

原文連結:https://antonioleiva.com/lambdas-kotlin-android/

 

 

雖然,我在其它文章講過一點Lambda運算式,我願意更深層次解釋Kotlin中Lambda運算式是怎樣工作的,以及當我們用Java庫時,他們是怎樣以Lambda運算式的單一方法轉換介面。

 

特別是我要給出一些例子解釋怎樣簡化Android架構的用法,我們還將詳細看到Android視圖的setOnClickListener。

 

SetOnClickListener轉換

 

我最喜歡Kotlin特性之一就是由於有了一些約定它簡化Android架構的工作

 

 

例如,setOnClickListener函數,在Java中時這樣定義的:

1 public void setOnClickListener(OnClickListener l) {2    ...3 }

 

而在Kotlin中我們使用它時,可以這樣:

1 fun setOnClickListener(l: (View) -> Unit)

 

這節省我們必須建立介面的一個匿名實現,極大地簡化了UI組件的初始化工作。

 

SetOnclickListener原本方法

 

 

依照上面,我們已經節省了足夠的代碼了,就是我們原必須建立OnClickListener的匿名類:

1 view.setOnClickListener(object : View.OnClickListener {2     override fun onClick(v: View?) {3         toast("Hello")4     }5 })

 

不過你將看到編輯器直接給你的警告,建議你用Lambda方法。

 

你能夠做的轉換:

 

1 view.setOnClickListener({ v -> toast("Hello") })

 

 

簡單,對吧?但是,這還能更進一步簡化。

 

 如果函數的最後一個參數是函數,它能夠移到圓括弧外面。

 

 

因此,我們能夠按此提取接聽程式:

 

1 view.setOnClickListener() { v -> toast("Hello") }

 

 

如果我們有多個參數,其餘的參數則在圓括弧內,即使這些參數是函數。僅僅最後一個參數能夠提出來。

 

 如果函數僅有一個參數,且它是一個函數,則圓括弧能刪除

 

 

而不是留著空的圓括弧,我們最好刪除這空的圓括弧:

 

1 view.setOnClickListener { v -> toast("Hello") }

 

 

這就構成了代碼塊。在這種方法下,我們能夠定義我們自己的模型語言DSL。

 

一個非常典型的例子是Kotlin參考頁面,他們構件DSL通過代碼建立HTML。

 

如果你不用Lambda參數,你可以刪除函數的左邊部分

 

如果你僅有一個參數這是正確。不使用視圖(v),就可以刪除它:

1 view.setOnClickListener { toast("Hello") }

 

另外,在函數僅接收參數,則不是在左邊定義,而是用保留字it,節省一些字元。

 

例如,如果我們用視圖傳遞它到另一個方法:

 

1 view.setOnClickListener { v -> doSomething(v) }

 

 

我們可以選擇簡單的用it:

1 view.setOnClickListener { doSomething(it) }

 

Lambda運算式,你的朋友

 

你見到的這些代碼的不同之處是非常重要的。這不僅為你節省了字元(約70%),還極大地提高了代碼的可讀性

 

 

我們只編寫真正重要的代碼,而跳過那些並沒有多大用處的代碼。

 

 

如果你想進一步學習更多這些知識,能夠非常流利建立自己的Android應用程式,我建議你擷取這本免費指南,學習怎樣構建你的第一個項目,或直接購買這本書,學習怎樣從頭開始建立一個完整的應用程式。

 

 

 

 

 

 

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.