19. Funciones

Versión para imprimir.

A. Funciones

Ejemplo

Salida

Main 1
Hola
Main 2
Hola
Adios

Revísalo en Kotlin play.

fun main() {
 println("Main 1")
 saluda() // invoca a saluda.
 /* Al terminar la primera
  * invocación continúa aquí. */
 println("Main 2")
 saluda() // invoca a saluda.
 /* Al terminar la segunda
  * invocación continúa aquí. */
 println("Adios")
}

/* Declaración de function saluda.
 * Primero va la palabra fun.
 * Sigue el nombre de la función.
 * Siguen los paréntesis.
 * Finalmente, entre llaves ({})
 * van las instrucciones. */
fun saluda() {
 println("Hola")
}
`; } } customElements.define("a1-funciones", A1Funciones);

B. Funciones que invocan funciones

Salida

main-1
c2
main-2
c1-1
c2
c1-2
main-3

Revísalo en Kotlin play.

fun main() {
 println("main-1")
 c2()
 println("main-2")
 c1()
 println("main-3")
}

fun c1() {
 println("c1-1")
 c2()
 println("c1-2")
}

fun c2() {
 println("c2")
}

C. Recursividad

Salida

m1
1
3

Revísalo en Kotlin play.

fun main() {
 println("m1")
 fn(3, -2)
 println("3")
}

fun fn(aIntbInt) {
 println(a + b)
}

D. Funciones con expresiones en los parámetros

Salida

13
ggg

Revísalo en Kotlin play.

fun fn(aIntbIntcInt) {
 println(a + b * c)
}

fun main() {
 val a = 3
 fn(3 - 8, a, a * 2)
 println("ggg")
}

E. Funciones con valor de regreso

Salida

18
6
33
65

Revísalo en Kotlin play.

fun main() {
 val x = fna(85)
 println(fna(41))
 println(x)
}

fun fna(tIntbcInt): Int {
 println(t + bc * 2)
 return 1 + t * 8
}

F. Lambdas

Salida

hola
-11
-60
mx
4

Revísalo en Kotlin play.

fun main() {
 val fx = { println("hola") }
 val fy =
  { f: String -> println(f) }
 val fz = { a: Int, b: Int ->
  println(a + b)
  a * b
 }
 val fw = { g: Int -> g + 1 }
 fx()
 println(fz(4, -15))
 fy("mx")
 println(fw(3))
}

G. Recursividad

Salida

Invoca: 2, 3
Invoca: 1, 3
Invoca: 0, 3
Devuelve 3
Devuelve: 4
Devuelve: 5
5

Revísalo en Kotlin play.

fun fns(aUIntbUInt): UInt {
 return if (a == 0U) {
  println("Devuelve $b")
  b
 } else {
  println("Invoca: ${a - 1U}, $b")
  val ant = fns(a - 1U, b)
  println("Devuelve: ${ant + 1U}")
  ant + 1U
 }
}

fun main() {
 println("Invoca: 2, 3")
 println(fns(2U, 3U))
}