Funcions
Funcions en kotlin¶
A part de les característiques que poden tenir les funcions, com el altres llenguatges com per exemple Java, (noms, paràmetres, valors per defecte, etc), Kotlin té les seves particularitats:
Funcions compactes (single-expression)¶
Serveixen per simplificar:
Forma completa:
fun double(x: Int): Int {
return x * 2
}
Forma compacta:
fun double(x: Int): Int = x * 2
Lambdes i funcions d’ordre superior¶
Kotlin tracta les funcions com si fossin de "primera classe", o "first class": Aixó vol dir que:
- es poden guardar en variables
- passar com a paràmetres
- retornar-les des d'altres funcions
Lambda¶
Una funció sense nom és una funció lambda, en aquest cas guardada com a variable:
val waterFilter : (Int) -> Int = { level: Int -> level / 2 }
println(waterFilter(20)) // 10
val variable:tipus=valor
Si no especifiquem el paràmetre en una funció lambda i només té un paràmetre, aquest per defecte serà "it", i podem ometre el paràmetre i -> :
val waterFilter : (Int) -> Int = { it / 2 }
Funció d’ordre superior¶
Les funcions d'ordre superior són aquelles que reben una funció com a argument:
fun encodeMsg(msg: String, encode: (String) -> String): String {
return encode(msg)
}
val upper = { s: String -> s.uppercase() }
println(encodeMsg("abc", upper))
Passar referència de funció¶
Amb :: podem passar la referència a una funció.
fun enc2(input:String): String = input.reversed()
encodeMessage("abc", ::enc2)
Últim paràmetre d'una funció¶
En Kotlin és preferible que si hi ha algun paràmetre que sigui una funció, aquest sigui l'ultim paràmetre:
encodeMessage("acronym", { input -> input.toUpperCase() })
Si la funció només té un paràmetre, podem ometre:
Els parèntesi:
val ints = listOf(1, 2, 3)
ints.filter { n: Int -> n > 0 }
El nom del paràmetre i la -> si només n'hi ha un (serà it):
ints.filter { it > 0 }