326 votes

Kotlin : comment passer une fonction en paramètre à une autre ?

Fonction donnée foo :

fun foo(m: String, bar: (m: String) -> Unit) {
    bar(m)
}

Nous pouvons le faire :

foo("a message", { println("this is a message: $it") } )
//or 
foo("a message")  { println("this is a message: $it") }

Maintenant, disons que nous avons la fonction suivante :

fun buz(m: String) {
   println("another message: $m")
}

Existe-t-il un moyen de passer "buz" comme paramètre à "foo" ? Quelque chose comme :

foo("a message", buz)

3voto

Anwar Zahid Points 146

Voici un exemple simple où je passe la fonction de multiplication comme paramètre à une autre fonction.

fun main(){
    result(10,3,::multiplication)// pass function as parameter wow kotlin amazing
}
fun multiplication(first:Int,second:Int):Int{
    return first*second
}
fun result(firstOne:Int,secondOne: Int,fn:(Int,Int)->Int){
    val result=fn(firstOne,secondOne)
    print(result)

}

2voto

flesk Points 4937

La réponse de Jason Minard est bonne. On pourrait également y parvenir en utilisant un lambda .

fun foo(m: String, bar: (m: String) -> Unit) {
    bar(m)
}

val buz = { m: String ->
    println("another message: $m")
}

Qui peut être appelé avec foo("a message", buz) .

Vous pouvez également rendre ce processus un peu plus sec en utilisant un fichier typealias .

typealias qux = (m: String) -> Unit

fun foo(m: String, bar: qux) {
    bar(m)
}

val buz: qux = { m ->
    println("another message: $m")
}

1voto

mhshams Points 3839

Apparemment, cela n'est pas encore pris en charge.

Plus d'informations :

http://devnet.jetbrains.com/message/5485180#5485180

http://youtrack.jetbrains.com/issue/KT-1183

1voto

kooskoos Points 3660

Vous pouvez également le faire en ligne en utilisant un lambda si c'est le seul endroit où vous utilisez cette fonction.

fun foo(m: String, bar: (m: String) -> Unit) {
    bar(m)
}

foo("a message") {
    m: String -> println("another message: $m")
}
//Outputs: another message: a message

0voto

Erik Karimov Points 181

Un autre exemple :

 fun foo(x:Int, Multiply: (Int) -> (Int)) {
    println(Multiply(x))
 }
 fun bar(x:Int):Int{
    return  x * x
 }
 foo(10, ::bar)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X