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:
- Tomar una o más funciones como parámetros.
- 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
- 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.
- 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.
- 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.
Curso de Programación en Swift
Módulo 1: Introducción a Swift
- Introducción a Swift
- Configuración del Entorno de Desarrollo
- Tu Primer Programa en Swift
- Sintaxis y Estructura Básica
- Variables y Constantes
- Tipos de Datos
Módulo 2: Control de Flujo
Módulo 3: Funciones y Closures
- Definición y Llamada de Funciones
- Parámetros de Función y Valores de Retorno
- Closures
- Funciones de Orden Superior
Módulo 4: Programación Orientada a Objetos
Módulo 5: Swift Avanzado
Módulo 6: Swift y Desarrollo de iOS
- Introducción al Desarrollo de iOS
- Fundamentos de UIKit
- Storyboards y Interface Builder
- Redes en Swift
- Core Data
- Fundamentos de SwiftUI