Introducción

En este tema, aprenderemos sobre las funciones y las lambdas en Kotlin. Las funciones son bloques de código reutilizables que realizan una tarea específica, mientras que las lambdas son funciones anónimas que se pueden tratar como valores. Ambos conceptos son fundamentales para escribir código limpio y eficiente en Kotlin.

Funciones en Kotlin

Declaración de Funciones

En Kotlin, las funciones se declaran utilizando la palabra clave fun. Aquí hay un ejemplo básico:

fun sayHello() {
    println("Hello, World!")
}

Parámetros y Tipos de Retorno

Las funciones pueden aceptar parámetros y devolver valores. Aquí hay un ejemplo de una función que suma dos números:

fun sum(a: Int, b: Int): Int {
    return a + b
}
  • a y b son parámetros de tipo Int.
  • Int después de los dos puntos : indica el tipo de retorno de la función.
  • La palabra clave return se utiliza para devolver el resultado.

Funciones de Una Sola Expresión

Kotlin permite definir funciones de una sola expresión sin usar la palabra clave return:

fun multiply(a: Int, b: Int): Int = a * b

Funciones con Valores Predeterminados

Puedes proporcionar valores predeterminados para los parámetros de una función:

fun greet(name: String = "Guest") {
    println("Hello, $name!")
}

Funciones de Orden Superior

Las funciones de orden superior son funciones que pueden tomar otras funciones como parámetros o devolverlas. Aquí hay un ejemplo:

fun operate(a: Int, b: Int, operation: (Int, Int) -> Int): Int {
    return operation(a, b)
}

fun main() {
    val sumResult = operate(3, 4, ::sum)
    println("Sum: $sumResult")
}

En este ejemplo, operate toma una función operation como parámetro y la aplica a a y b.

Lambdas en Kotlin

Declaración de Lambdas

Las lambdas son funciones anónimas que se pueden asignar a variables y pasar como argumentos. Aquí hay un ejemplo de una lambda que suma dos números:

val sumLambda: (Int, Int) -> Int = { a, b -> a + b }
  • (Int, Int) -> Int es la firma de la lambda, indicando que toma dos Int y devuelve un Int.
  • { a, b -> a + b } es la implementación de la lambda.

Uso de Lambdas

Puedes usar lambdas de la misma manera que usarías funciones normales:

fun main() {
    val result = sumLambda(3, 4)
    println("Sum: $result")
}

Lambdas y Funciones de Orden Superior

Las lambdas son especialmente útiles cuando se usan con funciones de orden superior. Aquí hay un ejemplo:

fun main() {
    val multiplyLambda: (Int, Int) -> Int = { a, b -> a * b }
    val result = operate(3, 4, multiplyLambda)
    println("Product: $result")
}

Lambdas con Receptores

Kotlin permite definir lambdas con receptores, que son similares a las funciones de extensión. Aquí hay un ejemplo:

val stringBuilderLambda: StringBuilder.() -> Unit = {
    append("Hello, ")
    append("World!")
}

fun main() {
    val sb = StringBuilder()
    sb.stringBuilderLambda()
    println(sb.toString())
}

Ejercicios Prácticos

Ejercicio 1: Función de Suma

Escribe una función llamada add que tome dos enteros y devuelva su suma.

fun add(a: Int, b: Int): Int {
    // Tu código aquí
}

Solución:

fun add(a: Int, b: Int): Int {
    return a + b
}

Ejercicio 2: Lambda de Multiplicación

Escribe una lambda llamada multiplyLambda que tome dos enteros y devuelva su producto.

val multiplyLambda: (Int, Int) -> Int = { a, b -> 
    // Tu código aquí
}

Solución:

val multiplyLambda: (Int, Int) -> Int = { a, b -> a * b }

Ejercicio 3: Función de Orden Superior

Escribe una función de orden superior llamada applyOperation que tome dos enteros y una función que opere sobre esos enteros, y devuelva el resultado.

fun applyOperation(a: Int, b: Int, operation: (Int, Int) -> Int): Int {
    // Tu código aquí
}

Solución:

fun applyOperation(a: Int, b: Int, operation: (Int, Int) -> Int): Int {
    return operation(a, b)
}

Conclusión

En esta sección, hemos aprendido sobre las funciones y las lambdas en Kotlin. Las funciones nos permiten encapsular y reutilizar código, mientras que las lambdas nos proporcionan una forma concisa de definir funciones anónimas. Ambos conceptos son esenciales para escribir código Kotlin eficiente y limpio. En el próximo módulo, exploraremos la Programación Orientada a Objetos en Kotlin, donde aprenderemos sobre clases, objetos, herencia y más.

© Copyright 2024. Todos los derechos reservados