Funciones en Kotlin
video[Tutorial] Funciones en Kotlin
Los métodos de Java ahora se conocen como funciones y se declaran con fun:
int doble(int x) { return 2 * x } |
fun doble(x: Int): Int { return 2 * x } |
void funcion(int p1, p2) { … } |
fun funcion(p1: Int, p2: Int) { … } |
fun rellena(buff: ByteArray, valor: Byte = 0, long: Int = buff.size) { for (i in 0..long-1) buff[i] = valor }La función anterior tiene tres parámetros, pero solo es obligatorio el primero. Como vemos a continuación puede ser llamada de muy diferentes formas.
var b = ByteArray(10) //Creamos un array de bytes con 10 elementos rellena(b, 99, 5) //Rellena 5 elementos con 99 rellena(b, 99) //Rellena todos elementos con 99 rellena(b) //Rellena todos elementos con 0 rellena(b, long=5) //Rellena 5 elementos con 0 rellena(long=5, buff=b) //Igual que el anteriorObserva como en las dos últimas líneas podemos indicar el nombre de cada parámetro. Es especialmente útil cuando queramos aclarar el significado de cada parámetro, queramos solo indicar algunos o queramos indicarlos en un orden diferente. Como puedes comprobar, la forma de indicar los parámetros en Kotlin es muy flexible. Para conseguir un comportamiento similar en Java sería necesario escribir varias sobrecargas de la función.
Una función puede tener un número variable de argumentos del mismo tipo:
void imprime(String... cadenas) { for (String cadena : cadenas) System.out.println(cadena); } |
fun imprime(vararg cadenas:String){ for (cadena in cadenas) println(cadena) } |
Si la función es muy corta podemos escribirla en una línea:
fun doble(x: Int): Int { return 2*x } |
fun doble(x: Int) = 2*x |
Kotlin admite funciones locales, es decir, una función dentro de otra función:
fun dfs(graph: Graph) { fun dfs(current: Vertex, visited: SetKotlin admite funciones con parámetros genéricos:) { … } dfs(graph.vertices[0], HashSet()) }
|
fun |
tailrec fun puntoFijoCoseno (x: Double = 1.0): Double = if (x == Math.cos(x)) x else puntoFijoCoseno(Math.cos(x))La función anterior calcula el punto fijo del coseno de forma recursiva. Toda función marcada con tailrec ha de llamarse a sí misma justo al final de la función.
Preguntas de repaso: Funciones