Kotlin(二)高度関数(関数をパラメータとして、関数をパラメータとして)
3555 ワード
一、概説
JS,Cなどの言語では関数式のプログラミングが一般的であり,関数はパラメータとして渡され,ターゲット関数で呼び出される.柔軟で簡潔なプログラミング方式です.Javaは直接関数をパラメータとして使用することができず,オブジェクトの参照しか伝達できないため,コールバック関数が必要な場合,インタフェースの匿名実装が伝達されることが多い.
二、高次関数の例
高次関数:別の関数をパラメータとして、または戻り値が関数である高次関数と呼ばれるlambdaの構文糖関数をパラメータとして補充する必要があります:コールバック関数の役割、クラス比インタフェースの戻り値は関数です:参照多態作用
2.1、パラメータを持たない関数をパラメータとする
2.2、パラメータと戻り値関数をパラメータとして使用する
2.3、高級関数は一つの関数を返す
関数は戻り値として、パラメータとして関数がなく、シーンが広いです.いくつかの状態の判断とのサブロジックに用いることができて、多態の作用があります.いくつかの異なる論理を指すことができます
JS,Cなどの言語では関数式のプログラミングが一般的であり,関数はパラメータとして渡され,ターゲット関数で呼び出される.柔軟で簡潔なプログラミング方式です.Javaは直接関数をパラメータとして使用することができず,オブジェクトの参照しか伝達できないため,コールバック関数が必要な場合,インタフェースの匿名実装が伝達されることが多い.
二、高次関数の例
高次関数:別の関数をパラメータとして、または戻り値が関数である高次関数と呼ばれるlambdaの構文糖関数をパラメータとして補充する必要があります:コールバック関数の役割、クラス比インタフェースの戻り値は関数です:参照多態作用
2.1、パラメータを持たない関数をパラメータとする
fun main(args: Array) {
//lambda ,
action(2){
println(" -- 1 ")
}
//lambda
action(1,{
println(" -- 2 ")
})
//
var method:()->Unit = {
println(" -- 3 ")
}
action(3, method)
}
/**
*
*/
fun action(first:Int, callback:()->Unit){
//
callback()
}
2.2、パラメータと戻り値関数をパラメータとして使用する
fun main(args: Array) {
action(1){it-> //Lambda ,
println(" = : $it")
true//Lambda ,
}
}
/**
*
*/
fun action(first:Int, callback:(Int)->Boolean){
//
if(callback(1)){
println(" true")
}else{
println(" false")
}
}
2.3、高級関数は一つの関数を返す
関数は戻り値として、パラメータとして関数がなく、シーンが広いです.いくつかの状態の判断とのサブロジックに用いることができて、多態の作用があります.いくつかの異なる論理を指すことができます
fun main(args: Array) {
var method: (Int, Int) -> Int
method = action()
println(method.invoke(1, 2))
method = action2()
println(method.invoke(1, 2))
}
/**
*
*/
fun action(): (Int, Int) -> Int {
//
return { j, i ->
j + i
}
}
fun action2(): (Int, Int) -> Int {
//
return { j, i ->
j - i
}
}