Chega de ensinar aos seus aplicativos o que fazer e como fazer: Funcional Programming em Kotlin

Uma das principais vantagens do Kotlin é que a linguagem permite emprego de conceitos de diferentes paradigmas, e um deles é a programação funcional. Hoje vamos explorar maneiras de se utilizar as operações existentes na biblioteca padrão da linguagem Kotlin para manipulação de Collections, fazendo uso do padrão funcional.

Um exemplo da vida real

Imagine a seguinte situação, você recebe uma lista de nomes, e precisa filtrar nesses nomes apenas os que começam com a letra “A”. Como proceder? Em Java, você provavelmente escreveria um código similar ao que segue:

List<String> nomes = Arrays.asList("Ana", "Bruno", "Ashley", "Simon");
List<String> nomesA = new ArrayList<>();
for(String nome : nomes) {
if(nome.startsWith("A") {
nomesA.add(nome);
}
}

Qual o problema com esse código? Você precisou ensinar o programa exatamente o que fazer.

In functional programming you tell the programm what you want , instead of how to do it — Venkat Subramaniam

Observe como seria a solução do mesmo problema em Kotlin fazendo uso da operação filter presente na biblioteca default da linguagem:

List<String> nomes = listOf("Ana", "Bruno", "Ashley", "Simon");
val nomesA = nomes.filter { it.startsWith("A") }

Sim, apenas uma linha de código para resolver o mesmo problema! E não se atente apenas à quantidade de linhas, perceba o quão mais claro esse código é! Basta olhar para saber o que está acontecendo!

Não está convencido? Vamos lá! Suponha que os requisitos do software mudaram, e agora além de filtrar os dados, precisamos exibi-los separados por vírgula, vamos lá?! Primeiro em Java:

Strings nomesEmVirgula = "";
for(int index; index < nomesA.size(); index++) {
nomesEmVirgula += nomesA.get(index);
if(index < nomesA.size() -1) {
nomesEmVirgula += ", ";
}
}
System.out.println(nomeEmVirgula);

Todo esse código para algo tão simples? Parece ridículo não é mesmo?! Vamos à versão em Kotlin:

val nomesEmVirgula = nomesA.joinToString(", ")
println(nomesEmVirgula)

Novamente, apenas uma linha de código, e o melhor, devido ao chaining de operações, poderíamos combinar a operação filter à joinToString, fazendo com que a solução completa ficasse da seguinte forma:

List<String> nomes = listOf("Ana", "Bruno", "Ashley", "Simon");
val nomesEmVirgula = nomes.filter { it.startsWith("A") }
.joinToString(", ")
println(nomesEmVirgula)

Incrível não é? Mas isso ainda não é tudo, por que nessa postagem utilizamos apenas duas das várias operações possíveis para Collections em Kotlin, as quais você pode ver na documentação oficial.


There’s nothing to fear, but fear itself. — Les Brown

Essa é uma das formas de se tirar vantagem da programação funcional para manipulação de Collections em Kotlin. Se você gostou dessa postagem, não se esqueça de marcar como favorito e compartilhar para que outras pessoas também possam ter acesso. Caso queira deixar o seu feedback, sinta-se livre para fazer um comentário, espero que possamos aprender mais juntos sobre esse tema. Você também pode me seguir para ficar atualizado sobre todas as próximas postagens.

Até a próxima.