Kotlin筆記之高階函數

高階函數

定義

高階函數就是以另一個函數作爲參數或者返回值的函數。任何以lambda 或者函數引用作爲參數的函數,或者返回值爲lambda或者函數引用的函數,或者兩者都滿足的函數都是高階函數

函數類型

函數類型語法如下:
在這裏插入圖片描述
聲明函數類型,需要將函數參數類型放在括號中,緊接着是一個箭頭和函數的返回類型

例子如下:

// 有兩個Int型參數和Int型返回值的函數
val sum:(Int,Int) -> Int={x,y ->x+y}

// 沒有參數和返回值的函數
val action:()->Unit ={println(12)}

注意: 在聲明一個普通的函數時,Unit類型的返回值是可以省略的,但是一個函數類型聲明總是需要一個顯式的返回類型,所以在這種場景下Unit是不能省略的

函數類型的返回值爲可空函數類型的可空變量情況

// 函數類型的返回值爲可空
var can :(Int,Int)-> Int?={null}

//函數類型的可空變量
var f:((Int,Int) -> Int)?=null

函數類型作爲參數

fun numResult(operation :(Int,Int)->Int){
    // 調用函數類型的參數
   val result=opration(2,3)
   println("The result is $result")
}

>>>> numResult{a,b -> a + b}
The result is 5

函數類型作爲函數的返回類型

要返回一個函數,需要寫一個return表達式,跟上一個lambda、一個成員引用,或者其他的函數類型的表達式,比如一個(函數類型的)局部變量

data class Person(
   val firstName :String,
   val lastName :String,
   val phoneName :String?
)

class ContactListFilters{
  var prefix:String=""
  var onlyWithPhoneNumber:Boolean =false
   
  // 聲明一個返回函數的函數
  fun getPredicate(): (Person) -> Boolean {
     val startsWithPrefix={p : Person -> p.firstName.startWith(prefix) || p.lastName.startsWith(prefix)}
     if(!onlyWithPhoneNumber){
         // 返回一個函數類型的變量
        return  startsWithPrefix
     }
     // 返回一個lambda
     return {startsWithPrefix(it) && it.phoneNumber !=null}
  }
}

>>>>> val contacts=listof(Person("mike","Li","125"),Person("marry","Zhao",null))
val  filters=ContactListFilters()
with(filters){
  prefix="Li"
  onlyWithPhoneNumber=true
}
println(contacts.filter(filters.getPredicate()))
發佈了24 篇原創文章 · 獲贊 1 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章