Las funciones de orden superior son un concepto fundamental en Swift y en muchos otros lenguajes de programación funcional. Una función de orden superior es una función que puede hacer al menos una de las siguientes cosas:

  1. Tomar una o más funciones como parámetros.
  2. Devolver una función como resultado.

Este concepto permite escribir código más modular y reutilizable. En esta sección, exploraremos cómo definir y utilizar funciones de orden superior en Swift.

Conceptos Clave

  1. Funciones como Parámetros

En Swift, puedes pasar funciones como parámetros a otras funciones. Esto es útil para crear funciones genéricas que pueden realizar operaciones específicas basadas en la función que se les pasa.

  1. Funciones que Devuelven Funciones

También puedes definir funciones que devuelven otras funciones. Esto es útil para crear funciones que generan otras funciones basadas en ciertos parámetros.

  1. Closures

Los closures son bloques de código que pueden ser capturados y utilizados posteriormente. Son una forma común de pasar funciones como parámetros en Swift.

Ejemplos Prácticos

Funciones como Parámetros

Vamos a definir una función que toma otra función como parámetro. Esta función aplicará la función pasada a cada elemento de un array.

func applyFunctionToArray(array: [Int], function: (Int) -> Int) -> [Int] {
    var result: [Int] = []
    for item in array {
        result.append(function(item))
    }
    return result
}

// Ejemplo de uso
let numbers = [1, 2, 3, 4, 5]
let squaredNumbers = applyFunctionToArray(array: numbers) { $0 * $0 }
print(squaredNumbers) // [1, 4, 9, 16, 25]

En este ejemplo, applyFunctionToArray toma un array de enteros y una función que toma un entero y devuelve un entero. Luego aplica esa función a cada elemento del array.

Funciones que Devuelven Funciones

Ahora, vamos a definir una función que devuelve otra función. Esta función generará una función que suma un número específico a su argumento.

func makeAdder(x: Int) -> (Int) -> Int {
    return { y in
        return x + y
    }
}

// Ejemplo de uso
let addFive = makeAdder(x: 5)
let result = addFive(10)
print(result) // 15

En este ejemplo, makeAdder toma un entero x y devuelve una función que toma otro entero y y devuelve la suma de x y y.

Closures

Los closures son una forma concisa de definir funciones en Swift. Aquí hay un ejemplo de cómo usar un closure como parámetro de una función.

let numbers = [1, 2, 3, 4, 5]
let doubledNumbers = numbers.map { $0 * 2 }
print(doubledNumbers) // [2, 4, 6, 8, 10]

En este ejemplo, usamos el método map del array, que toma un closure como parámetro. El closure toma un elemento del array y devuelve el doble de ese elemento.

Ejercicios Prácticos

Ejercicio 1: Filtrar Números Pares

Escribe una función de orden superior llamada filterArray que tome un array de enteros y un closure que determine si un número debe ser incluido en el array resultante. Usa esta función para filtrar los números pares de un array.

func filterArray(array: [Int], condition: (Int) -> Bool) -> [Int] {
    var result: [Int] = []
    for item in array {
        if condition(item) {
            result.append(item)
        }
    }
    return result
}

// Ejemplo de uso
let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
let evenNumbers = filterArray(array: numbers) { $0 % 2 == 0 }
print(evenNumbers) // [2, 4, 6, 8, 10]

Ejercicio 2: Crear una Función Multiplicadora

Escribe una función llamada makeMultiplier que tome un entero x y devuelva una función que multiplique su argumento por x.

func makeMultiplier(x: Int) -> (Int) -> Int {
    return { y in
        return x * y
    }
}

// Ejemplo de uso
let multiplyByThree = makeMultiplier(x: 3)
let result = multiplyByThree(10)
print(result) // 30

Resumen

En esta sección, hemos aprendido sobre las funciones de orden superior en Swift. Hemos visto cómo pasar funciones como parámetros, cómo devolver funciones desde otras funciones y cómo usar closures. Estos conceptos son fundamentales para escribir código más modular y reutilizable. Asegúrate de practicar estos conceptos con los ejercicios proporcionados para reforzar tu comprensión.

© Copyright 2024. Todos los derechos reservados