Programação Funcional em Swift: Fundamentos e Exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução à Programação Funcional em Swift



Swift é uma linguagem de programação multiparadigma, desenvolvida pela Apple para criar aplicativos para iOS, macOS, watchOS e tvOS. Além das abordagens orientada a objetos e orientada a protocolos, Swift suporta ativamente a programação funcional. Este estilo é baseado no uso de funções puras, imutabilidade de dados e na eliminação de efeitos colaterais.



A programação funcional torna o código mais previsível, testável e seguro para paralelismo. Neste artigo, vamos explorar os conceitos-chave da abordagem funcional em Swift: imutabilidade, funções de ordem superior, closures e encadeamento de métodos. Você verá como usar map, filter e reduce para escrever código conciso e expressivo.



Fundamentos da Abordagem Funcional em Swift



Imutabilidade



Na programação funcional, os dados não são alterados após a criação. Em vez de modificar um objeto existente, cria-se um novo. Swift incentiva essa abordagem com a palavra-chave let para declarar constantes.



// Valor imutávellet numbers = [1, 2, 3, 4, 5]// numbers.append(6) // Erro de compilação — numbers é imutável

// Criando um novo arraylet newNumbers = numbers + [6]print(newNumbers) // [1, 2, 3, 4, 5, 6]


Usar let em vez de var ajuda a evitar alterações acidentais de estado e simplifica a depuração.



Funções como Cidadãos de Primeira Classe



Em Swift, funções são cidadãos de primeira classe. Elas podem ser atribuídas a variáveis, passadas como argumentos e retornadas de outras funções.



// Função atribuída a uma variávellet multiply: (Int, Int) -> Int = { $0 * $1 }print(multiply(3, 4)) // 12

// Função que recebe outra funçãofunc 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 em Swift



Closures são blocos de funcionalidade autossuficientes que podem capturar e armazenar referências a variáveis do contexto circundante. Em Swift, closures são amplamente usadas para callbacks e transformações funcionais.



// Closure simpleslet greeting = { (name: String) -> String in    return "Olá, \\(name)!"}print(greeting("Mundo")) // Olá, Mundo!

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


Closures tornam o código compacto e expressivo, especialmente ao trabalhar com coleções.



Funções de Ordem Superior: map, filter, reduce



Estes são os três pilares da programação funcional em Swift. Eles permitem processar arrays, dicionários e outras coleções sem loops explícitos.



map — Transformando cada elemento



O método map aplica um closure a cada elemento da coleção e retorna um novo array com os resultados.



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

// Trabalhando com stringslet names = ["Ana", "Boris", "Vitor"]let uppercased = names.map { $0.uppercased() }print(uppercased) // ["ANA", "BORIS", "VITOR"]


filter — Selecionando por condição



filter retorna um novo array contendo apenas os elementos que satisfazem uma condição dada.



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

// Filtrando stringslet words = ["Swift", "iOS", "macOS", "função"]let shortWords = words.filter { $0.count <= 4 }print(shortWords) // ["iOS", "macOS"]

Blogs

Book Recommendations