Bandeira vetor criado por katemangostar — br.freepik.com

8 conceitos de programação funcional para estudar em Python

Elder Louzada
BaixadaNerd
Published in
3 min readAug 3, 2019

--

Nesses dias, estive estudando um pouco sobre a linguagem Python através da plataforma SoloLearn — um lugar muito bom para estudar não apenas essa linguagem, como também outras tecnologias -, que eu acho bem parecida com o Duolingo. Esse já não é o meu primeiro contato com o programação funcional, havia visto o paradigma sendo aplicado a Javascript há algum tempo inclusive, mas ainda assim, pude aprender bastante coisa nova.

Essa coisa toda de trabalhar com funções eu sempre considerei bem interessante. Quando estava tendo meus primeiros contatos com programação em geral, ao descobrir que poderia reutilizar e chamar trechos de códigos em diversas situações me lembro de ter tido uma grande surpresa. Ainda assim, esse paradigma da programação funcional abrange uma série de outras coisas, para que tu tenhas uma ideia, esse é o escopo de assuntos abordados nesse módulo da trilha do curso:

  • Functional Programming: uma visão geral do assunto
  • Lambdas: uma feature do Python que nos ajuda a simplificar a maneira como declaramos funções, que eu achei bem parecido com as arrow functions do ES6
  • map & filter: são duas funções bem recorrentes quando trabalhamos com objeto iteráveis, inclusive iterators e iterables são tópicos bem interessantes para discutir sobre. Essas funções estão presentes no Javascript também, então não considero esse um conhecimento totalmente novo para mim, porém confesso que não conhecia a sintaxe dessas funções no Python
  • Generators: é um outro tipo de objeto iterável, sendo declarado através de uma função com utilização da palavra yield. Uma peculiaridade desse objeto é que não o acessamos através de um index, como é o caso das list ou dictionary, ao invés disso, fazemos um aproach utilizando o já conhecido laço for .. in
  • Decorators: um modo de adicionar um novo conteúdo a uma função já existente, sem alterá-la diretamente
  • Recursion: é uma maneira de referenciar uma função dentro de seu próprio escopo, em muitos casos pode substituir um laço de repetição. Uma coisa importante que eu aprendi nesse tópico do curso é que, para que, quando chamada, a função recursiva não apresente problemas — como o RuntimeError -, precisamos incluir na função um base case, ou seja, uma linha de código que tenha um ‘return’, assim a função não se referenciará infinitas vezes
  • Sets: são essencialmente mais um tipo de estrutura de dados iterável e com caracteristicas próprias. Sets não podem ser indexados uma vez que não possuem uma ordem, também não podem possuir valores duplicados e têm metódos próprios para inserção de deleção de elementos, respectivamente add() e pop(), ainda assim compartilham métodos em comum com as List — len() e o in são exemplos disso. No fim, aprendi também que as quatros estruturas de dados que tive contato durante a trilha devem ser usadas para resolver problemas específicos. Um exemplo disso são as Tuple, que devem ser utilizadas em situações em que não queremos que um certo conjunto de dados seja alterado, devido a característica delas serem imutáveis.
  • Itertools: funções usadas para manipular objetos iteráveis. Entre as que eu vi, estão: takewhile(<função boleana>), que pega elementos de um objeto iterável enquanto a função boleana retornar True; permute(<objeto iterável>), que permuta os items de um objeto forcenecido; product(<objeto iterável 1>,<objeto iterável 2>), que retorna todas as combinações possíveis entre os elementos dos objetos fornecidos. Outras funções que aprendi foram: cycle(), count(), repeat(), accumulate() e chain(). Para não me estender demais, prefiro abordá-las em uma outra oportunidade.

Todos esses são tópicos bem interessantes, se bem utilizados podem melhorar e muito a forma como desenvolvemos nossos programas. Pretendo escrever mais sobre o assunto em futuras oportunidades, bem como demonstrar como utilizarei tais conhecimentos em meus projetos. Sobre a plataforma SoloLearn, devo dizer que está sendo de grande ajuda para mim e também uma forma bem rápida de eu me familiarizar mais com a linguagem Python. Em resumo, estou curtindo bastante.

--

--

Elder Louzada
BaixadaNerd

Estudante de ADS pela Fatec, aprendendo um pouco mais sobre programação e desenvolvimento front-end todos os dias. Gosta de jogar games nas horas vagas.