A Programação Funcional (PF) é um paradigma de programação que foca em funções puras, imutabilidade, e a aplicação de transformações de dados de maneira declarativa. Kotlin, embora seja uma linguagem que suporta múltiplos paradigmas (incluindo orientado a objetos), possui muitas funcionalidades que facilitam a programação funcional. Vamos explorar os principais conceitos de programação funcional em Kotlin.
Em programação funcional, funções puras são aquelas que:
Exemplo de função pura em Kotlin:
kotlin
Copiar código
fun somar(a: Int, b: Int): Int {
return a + b // A função sempre retorna a soma de a e b, sem efeitos colaterais
}
Na programação funcional, os dados são tratados como imutáveis, ou seja, não podem ser modificados após a criação. Em Kotlin, usamos val
(para variáveis imutáveis) para garantir que os valores não possam ser alterados.
Exemplo:
kotlin
Copiar código
val lista = listOf(1, 2, 3)
// lista[0] = 4 // Erro: listas são imutáveis
Imutabilidade ajuda a evitar efeitos colaterais indesejados e facilita a compreensão do código.
Como mencionei antes, uma função de alta ordem é uma função que recebe outra função como argumento ou retorna uma função. Funções de alta ordem são essenciais para a programação funcional, pois permitem compor funções e tratar operações de forma flexível.
Exemplo de função de alta ordem em Kotlin:
kotlin
Copiar código
fun <T> List<T>.meuFilter(predicate: (T) -> Boolean): List<T> {
val resultado = mutableListOf<T>()
for (item in this) {
if (predicate(item)) {
resultado.add(item)
}
}
return resultado
}
val numeros = listOf(1, 2, 3, 4, 5)
val numerosPares = numeros.meuFilter { it % 2 == 0 }
println(numerosPares) // Saída: [2, 4]
Aqui, a função meuFilter
é uma função de alta ordem porque recebe uma função (predicate
) como parâmetro.
As lambdas são funções anônimas que podem ser usadas como valores, passadas como parâmetros e aplicadas em coleções. Em Kotlin, as lambdas são amplamente usadas em programação funcional para operações como mapeamento, filtragem e redução de coleções.