Introducció

En aquest tema, explorarem les funcions d'ordre superior i la programació funcional en Kotlin. Les funcions d'ordre superior són aquelles que poden rebre altres funcions com a paràmetres o retornar funcions. La programació funcional és un paradigma que tracta les funcions com a ciutadans de primera classe, permetent una major flexibilitat i expressivitat en el codi.

Conceptes Clau

Funcions d'Ordre Superior

  1. Definició: Una funció que pot acceptar altres funcions com a arguments o retornar una funció.
  2. Sintaxi: La sintaxi per definir una funció d'ordre superior és similar a la de qualsevol altra funció, però els paràmetres o el valor de retorn són funcions.

Programació Funcional

  1. Immutabilitat: Les dades no es modifiquen després de ser creades.
  2. Funcions Pures: Les funcions que no tenen efectes secundaris i sempre retornen el mateix resultat per als mateixos arguments.
  3. Expressions Lambda: Funcions anònimes que poden ser tractades com a valors.

Exemples Pràctics

Exemple 1: Funció d'Ordre Superior

fun <T> filter(list: List<T>, predicate: (T) -> Boolean): List<T> {
    val result = mutableListOf<T>()
    for (item in list) {
        if (predicate(item)) {
            result.add(item)
        }
    }
    return result
}

fun main() {
    val numbers = listOf(1, 2, 3, 4, 5, 6)
    val evenNumbers = filter(numbers) { it % 2 == 0 }
    println(evenNumbers) // Output: [2, 4, 6]
}

Explicació:

  • La funció filter accepta una llista i una funció predicate que determina si un element ha de ser inclòs en el resultat.
  • La funció predicate és una expressió lambda que verifica si un nombre és parell.

Exemple 2: Funció que Retorna una Funció

fun createMultiplier(factor: Int): (Int) -> Int {
    return { number -> number * factor }
}

fun main() {
    val double = createMultiplier(2)
    val triple = createMultiplier(3)
    println(double(4)) // Output: 8
    println(triple(4)) // Output: 12
}

Explicació:

  • La funció createMultiplier retorna una funció que multiplica un nombre pel factor donat.
  • Les funcions double i triple són creades amb factors 2 i 3 respectivament.

Exercicis Pràctics

Exercici 1: Filtrar Nombres Senars

Escriu una funció d'ordre superior que filtri els nombres senars d'una llista.

fun filterOddNumbers(list: List<Int>): List<Int> {
    // Implementa la funció aquí
}

fun main() {
    val numbers = listOf(1, 2, 3, 4, 5, 6)
    val oddNumbers = filterOddNumbers(numbers)
    println(oddNumbers) // Output esperat: [1, 3, 5]
}

Solució:

fun filterOddNumbers(list: List<Int>): List<Int> {
    return filter(list) { it % 2 != 0 }
}

Exercici 2: Crear una Funció de Salutació

Escriu una funció que retorni una funció de salutació personalitzada.

fun createGreeting(greeting: String): (String) -> String {
    // Implementa la funció aquí
}

fun main() {
    val sayHello = createGreeting("Hello")
    val sayHola = createGreeting("Hola")
    println(sayHello("John")) // Output esperat: "Hello, John!"
    println(sayHola("Maria")) // Output esperat: "Hola, Maria!"
}

Solució:

fun createGreeting(greeting: String): (String) -> String {
    return { name -> "$greeting, $name!" }
}

Errors Comuns i Consells

  1. Oblidar la Immutabilitat: En la programació funcional, és important mantenir les dades immutables. Evita modificar les col·leccions originals.
  2. No Utilitzar Funcions Pures: Assegura't que les funcions no tinguin efectes secundaris i sempre retornen el mateix resultat per als mateixos arguments.
  3. No Comprendre les Lambdas: Les expressions lambda poden ser confuses al principi. Practica escrivint lambdas senzilles i progressivament més complexes.

Conclusió

En aquesta secció, hem après sobre les funcions d'ordre superior i la programació funcional en Kotlin. Hem vist com les funcions poden ser tractades com a ciutadans de primera classe, permetent una major flexibilitat i expressivitat en el codi. A més, hem practicat amb exemples i exercicis per reforçar aquests conceptes. En el proper tema, explorarem les coroutines i la programació asíncrona en Kotlin.

© Copyright 2024. Tots els drets reservats