kotlin之lambda表達式和匿名函數


lambda表達式,稱為匿名函數,是一種函數字面值,也就是沒有聲明的函數,但可以作為表達式傳遞出去.


函數類型:

對於接受另一個函數的作為自己的參數,必須針對這個參數指定一個函數的類型如

fun <T>max(collection: Collection<T>,less:(T,T)->Boolean):T?{
    var max :T?=null
    for (it in collection){
        if (max==null ||less(max,it))
            max=it
    }
    return max
}

參數less的類型(T,T)->Boolean ,也就是說,它是一個函數,接受二個T類型的參數,並且返回一個Boolean類型的結果


lambda表達式語法

 val sun = { x: Int, y: Int -> x + y }

表達式包含在大括號之內,在完整的語法形式中,參數聲明在小括號中,參數類型可選,函數體在->符合之后,如果lambda表達式自動推斷的返回值類型不是Unit,那么在lambda表達式函數體中,最后一條表達式的值會被當做整個lambda表達式的返回值


匿名函數

ints.filter(fun(item)=item >0)

對於匿名函數,返回值類型的自動推斷方式與通常函數的一樣,如果函數體是一個表達式,那么返回值類型可以推斷得到,如果函數體是多條語句組成的代碼段,則返回值類型必須明確指定

注意:匿名函數參數一定在小括號內傳遞,允許將函數參數寫在小括號之外的語法,僅對lambda表達式有效.


閉包

 var sum = 0
    ints.filrter(it>0).forEach(
            sum+=it
    )
    print(sum)

lambda表達式匿名函數可以訪問它的閉包,也就是定義在外層范圍的變量.,


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM