Les funcions d'ordre superior són un concepte fonamental en Swift i en molts altres llenguatges de programació moderns. Aquestes funcions poden rebre altres funcions com a paràmetres, retornar funcions com a resultat o fer ambdues coses. Això permet una gran flexibilitat i potència en la programació funcional.

Conceptes Clau

  1. Funcions com a Paràmetres: Passar funcions com a arguments a altres funcions.
  2. Funcions com a Valors de Retorn: Retornar funcions des d'altres funcions.
  3. Closures: Utilitzar closures com a funcions d'ordre superior.

Funcions com a Paràmetres

Exemple 1: Funció que Accepta una Funció com a Paràmetre

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

func add(_ x: Int, _ y: Int) -> Int {
    return x + y
}

let result = applyOperation(4, 2, operation: add)
print(result) // Sortida: 6

Explicació:

  • applyOperation és una funció que accepta dos enters (a i b) i una funció operation que pren dos enters i retorna un enter.
  • add és una funció que suma dos enters.
  • applyOperation(4, 2, operation: add) aplica la funció add als valors 4 i 2.

Exemple 2: Utilitzant Closures com a Paràmetres

let result = applyOperation(4, 2, operation: { (x: Int, y: Int) -> Int in
    return x * y
})
print(result) // Sortida: 8

Explicació:

  • En lloc de passar una funció definida prèviament, es passa una closure que multiplica dos enters.

Funcions com a Valors de Retorn

Exemple 3: Funció que Retorna una Funció

func makeIncrementer(incrementAmount: Int) -> (Int) -> Int {
    func incrementer(number: Int) -> Int {
        return number + incrementAmount
    }
    return incrementer
}

let incrementByTwo = makeIncrementer(incrementAmount: 2)
print(incrementByTwo(3)) // Sortida: 5

Explicació:

  • makeIncrementer és una funció que accepta un enter incrementAmount i retorna una funció incrementer que incrementa un nombre pel valor de incrementAmount.
  • incrementByTwo és una funció que incrementa qualsevol nombre per 2.

Funcions d'Ordre Superior en Acció

Exemple 4: Utilitzant Funcions d'Ordre Superior amb Arrays

Swift proporciona diverses funcions d'ordre superior per treballar amb arrays, com ara map, filter i reduce.

map

let numbers = [1, 2, 3, 4, 5]
let squaredNumbers = numbers.map { $0 * $0 }
print(squaredNumbers) // Sortida: [1, 4, 9, 16, 25]

Explicació:

  • map aplica una funció a cada element de l'array numbers i retorna un nou array amb els resultats.

filter

let evenNumbers = numbers.filter { $0 % 2 == 0 }
print(evenNumbers) // Sortida: [2, 4]

Explicació:

  • filter retorna un nou array amb els elements de numbers que compleixen la condició especificada (ser parells en aquest cas).

reduce

let sum = numbers.reduce(0) { $0 + $1 }
print(sum) // Sortida: 15

Explicació:

  • reduce combina tots els elements de l'array numbers en un sol valor, en aquest cas, la suma de tots els elements.

Exercicis Pràctics

Exercici 1: Funció que Accepta una Funció com a Paràmetre

Escriu una funció applyTwice que accepti una funció i un valor, i apliqui la funció al valor dues vegades.

func applyTwice(_ value: Int, operation: (Int) -> Int) -> Int {
    return operation(operation(value))
}

// Solució
func double(_ x: Int) -> Int {
    return x * 2
}

let result = applyTwice(3, operation: double)
print(result) // Sortida esperada: 12

Exercici 2: Funció que Retorna una Funció

Escriu una funció makeMultiplier que accepti un enter multiplier i retorni una funció que multipliqui un nombre pel multiplier.

func makeMultiplier(multiplier: Int) -> (Int) -> Int {
    return { $0 * multiplier }
}

// Solució
let multiplyByThree = makeMultiplier(multiplier: 3)
print(multiplyByThree(4)) // Sortida esperada: 12

Resum

En aquesta secció, hem après sobre les funcions d'ordre superior en Swift, incloent com passar funcions com a paràmetres, retornar funcions i utilitzar closures. També hem vist com utilitzar funcions d'ordre superior amb arrays mitjançant map, filter i reduce. Els exercicis pràctics proporcionats ajuden a reforçar aquests conceptes clau.

© Copyright 2024. Tots els drets reservats