Programación funcional en Swift: fundamentos y ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción a la programación funcional en Swift



Swift es un lenguaje de programación multiparadigma, desarrollado por Apple para crear aplicaciones para iOS, macOS, watchOS y tvOS. Además de los enfoques orientado a objetos y orientado a protocolos, Swift admite activamente la programación funcional. Este estilo se basa en el uso de funciones puras, inmutabilidad de datos y la eliminación de efectos secundarios.



La programación funcional hace que el código sea más predecible, comprobable y seguro para la concurrencia. En este artículo, analizaremos los conceptos clave del enfoque funcional en Swift: inmutabilidad, funciones de orden superior, closures y cadenas de métodos. Verá cómo usar map, filter y reduce para escribir código conciso y expresivo.



Fundamentos del enfoque funcional en Swift



Inmutabilidad



En la programación funcional, los datos no se modifican después de su creación. En lugar de modificar un objeto existente, se crea uno nuevo. Swift fomenta este enfoque con la palabra clave let para declarar constantes.



// Valor inmutablelet numbers = [1, 2, 3, 4, 5]// numbers.append(6) // Error de compilación — numbers es inmutable

// Creación de un nuevo arraylet newNumbers = numbers + [6]print(newNumbers) // [1, 2, 3, 4, 5, 6]


Usar let en lugar de var ayuda a evitar cambios accidentales de estado y simplifica la depuración.



Funciones como objetos de primera clase



En Swift, las funciones son objetos de primera clase. Se pueden asignar a variables, pasar como argumentos y devolver desde otras funciones.



// Función asignada a una variablelet multiply: (Int, Int) -> Int = { $0 * $1 }print(multiply(3, 4)) // 12

// Función que recibe otra funciónfunc applyOperation(_ a: Int, _ b: Int, operation: (Int, Int) -> Int) -> Int { return operation(a, b)}

let result = applyOperation(10, 5, operation: multiply)print(result) // 50


Closures en Swift



Los closures son bloques de funcionalidad autocontenidos que pueden capturar y almacenar referencias a variables del contexto circundante. En Swift, los closures se utilizan ampliamente para callbacks y transformaciones funcionales.



// Closure simplelet greeting = { (name: String) -> String in    return "¡Hola, \\(name)!"}print(greeting("Mundo")) // ¡Hola, Mundo!

// Forma abreviada con parámetroslet numbers = [3, 1, 4, 1, 5, 9]let sorted = numbers.sorted { $0 < $1 }print(sorted) // [1, 1, 3, 4, 5, 9]


Los closures hacen que el código sea compacto y expresivo, especialmente al trabajar con colecciones.



Funciones de orden superior: map, filter, reduce



Estos son los tres pilares de la programación funcional en Swift. Permiten procesar arrays, diccionarios y otras colecciones sin bucles explícitos.



map — transformación de cada elemento



El método map aplica un closure a cada elemento de la colección y devuelve un nuevo array con los resultados.



let prices = [100, 200, 300, 400]let discounted = prices.map { $0 * 0.9 }print(discounted) // [90.0, 180.0, 270.0, 360.0]

// Trabajo con stringslet names = ["Ana", "Boris", "Víctor"]let uppercased = names.map { $0.uppercased() }print(uppercased) // ["ANA", "BORIS", "VÍCTOR"]


filter — selección por condición



filter devuelve un nuevo array que contiene solo los elementos que cumplen una condición dada.



let scores = [45, 78, 92, 33, 88, 61]let passingScores = scores.filter { $0 >= 60 }print(passingScores) // [78, 92, 88, 61]

// Filtrado de stringslet words = ["Swift", "iOS", "macOS", "función"]let shortWords = words.filter { $0.count <= 4 }print(shortWords) // ["iOS", "macOS"]

Blogs

Book Recommendations