Oi e aí pessoal meu nome é Vinícius dias porque hoje a gente vai bater um papo rápido resumido sobre o que que essa tal de programação funcional [Música] e muito provavelmente você já ouviu esse termo programação funcional nós vamos ver na prática o que que essa tal de programação funcional é útil preciso saber isso vamos entender de forma simplificada O que que significa esse termo Então como você já me conhece vamos para a partir de definição formal aquela parte que eu nunca entendo muito bem programação funcional é o processo de construir software através de composição
de funções puras evitando compartilhamento de estados dados mutáveis Que efeitos colaterais é declarativa ao invés de interativa S uma das possíveis definições só que aqui tem muita informação eu não consigo entender nada do que você quer dizer então vamos tentar quebrar essas informações aqui explicar um pouco melhor o que que é na prática o a da programação funcional para começar a programação funcional é um paradigma de programação que que você quer dizer de novo voltando e com palavras difíceis né um paradigma de programação basicamente digita para gente como a gente vai resolver algum problema como
a gente vai escrever nosso código então existem alguns paradigmas de programação Muito provavelmente caso você seja uma pessoa que desenvolve software você já ouviu já trabalhou com alguns deles então vamos dar uma passada de olho rápida existem basicamente duas grandes famílias de paradigmas e dentro dessas famílias existem paradigmas em si tão existem outros eu só se tem alguns aqui então dentro da família dos paradigmas imperativos a gente tem a programação procedural onde nós temos diversas instruções de código e essas instruções são separadas em procedimentos em funções por exemplo temos a programação orientada a objetos que
é um dos paradigmas mais famosos onde nós temos classes e objetos como principal desse Paradigma e a gente tem a família de paradigmas declarativos e um desses par e a programação funcional paradigma de programação funcional Gente tem também programação lógica enfim a programação funcional ela tem como conceito principal Obviamente as funções mais a gente enxerga as funções como Abstrações como formas obviamente de resolver nossos problemas pensando no conceito matemático de funções onde a gente tem alguma coisa muito complexa e que os matemáticos precisam resolver e Abstrai em isso para uma função que recebe dados e
devolve dados basicamente super simplificando o conceito Essa é a ideia por trás do paradigma funcional Então vamos só para falar de forma também muito resumida a diferença entre o paradigma imperativo e declarativo um par de não paradigma imperativo você vai escrever linha a linha exatamente o que que o programa tem que fazer o que o computador vai executar de instrução já não para de uma declarativo você não manda ele executar você diz o o que é que ele faça e como ele vai fazer isso ele vai decidir isso talvez fica um pouco abstrato quando a
gente fala assim mas uma linguagem muito famosa que usa uma espécie de paradigma declarativo é o SQL você informa para ele por exemplo utilizando uma trave ó seleciona o campo e campo2 dessa tabela onde o campo 3 foi igual a esse valor se o sistema de banco de dados vai utilizar o algoritmo de tabela de espalhamento se essa bucha aqui vai ser se essa comparação vai ser comparando byte a Byte ou algum outro algoritmo se não importa para gente a gente informa o que a gente quer e não como a gente quer que isso seja
feito então basicamente Essa é a ideia de um paradigma declarativo a gente declara o que a gente quer e não de forma interativa fica falando exatamente o que quer como quer que seja feito Então essa é a diferença entre essas duas famílias só que para mim isso ainda fica um pouco confuso já gente a gente vai ver um exemplo prático só que antes de chegar nisso na parte e vamos conhecer alguns daqueles nomes conceitos que quando a gente estuda sobre programação funcional a gente acaba se deparando o mais comum acreditou ou seja de funções puras
que que é uma função pura basicamente é uma função que Independente de quantas vezes você chame com os mesmos parâmetros O resultado vai ser o mesmo ela não altera nenhum estado fora dela não tem efeitos colaterais basicamente uma função que recebe dois parâmetros e devolve a soma deles é uma função pura agora uma função que escreve no banco de dados ou altere uma variável Global por exemplo não é uma função pura porque quando você é se você chamar essa função e a variável Global já tiver sido definida Talvez o resultado seja diferente ela produz um
efeito colateral se você chamar o banco de dados ele tiver fora você pode ter um problema ou pode não ter um problema então o comportamento pode variar nas vezes que você chama existe conceito de composição de funções isso é muito comum que é basicamente eu vou a série de instruções que vão ser chamadas no mesmo dado Então imagina que você tem uma lista e você quer fazer uma pe amento dessa lista para outros dados e depois de realizar um filtro e depois dessa lista filtrada você vai reduzir para o único dado a soma de todos
os números por exemplo então você pode compor as chamadas de funções para executar várias operações no mesmo dado e mutabilidade um conceito muito importante de programação funcional que Inclusive a gente usa muito em outros paradigmas como paradigma orientado a objetos basicamente é o conceito de que uma função ou um dado não pode ser alterado você sempre cria um novo dado então uma função não altera os parâmetros que ela recebe ela devolve um novo valor que precisa ser utilizado por exemplo aplicações parciais de funções imagina que você tem que chamar a mesma função cinco vezes e
o primeiro parâmetro é sempre repetido é sempre o mesmo então você cria uma nova função que tem é aquele primeiro parâmetro já aplicado aquele primeiro parâmetro fixado e tem essa aplicação parcial e utiliza essa nova função só com o segundo parâmetros é bastante comum mônadas são conceito muito interessante que também a gente utiliza na programação orientada a objetos de tipos genéricos que encapsulam outros tipos um tipo opcional por exemplo um tipo Líder ou seja ou Isto ou Aquilo Então você bastante comum na programação funcional e a gente inclusive aproveita esses conceitos de programação orientada a
objetos enfim são muitos conceitos que a gente acaba se deparando vale a pena o estudo individual de cada uma dessas coisas aqui Inclusive a gente tem treinamento de programação funcional na loira mas vamos ver um exemplo prático em um probleminha sendo resolvido com programação imperativa utilizando aqui um paradigma imperativo no caso aqui a programação procedural mesmo sem nada e depois de um exemplo usando programação funciona vamos lá eu tenho que uma lista de nomes e desses nomes eu quero receber de volta só os nomes que contenham espaço É nesse cenário aqui Vinícius dias tem espaço
Maria José tem espaço José Maria tem espaço então na lista final só a Anna ficaria de fora então no paradigma para o paradigma imperativo o que que eu preciso informar Olha só eu preciso desse novo espaço de memória aqui para que a gente tenha onde colocar os nomes com espaço e para cada nome dessa lista de nomes o que que eu quero fazer quero verificar se nesse nome existe o espaço e se existir eu vou adicionar naquele espaço de memória lá naquela variável eu vou adicionar esse nome e no final nomes com o espaço vai
conter só os nomes que temos passo é um exemplo simples bobo mas dá para ver que a gente informa para o computador linha a linha o que a gente quer fazer exatamente como a gente quer que seja feito eu quero um espaço de memória aqui eu vou para percorrer essa lista toda para cada item eu vou fazer uma verificação se essa verificação por bem sucedida eu vou adicionar naquela lista o nosso nome é uma um paradigma declarativo eu simplesmente informar e olha só eu tenho uma lista de nomes eu quero que essa lista aqui de
nomes que o espaço seja esses nomes filtrados onde eu só tenho o que tenho espaço então um exemplo disso seria assim eu tenho lista de nomes só que isso não muda agora os nomes como espaço vai receber os nomes filtrados então eu vou informar aqui o filtro que eu quero aplicar onde baseado no nome eu vou verificar se ele contém o espaço basicamente isso ao suficiente para que essa linguagem que a JavaScript caso você esteja se perguntando isso é o suficiente para basicamente informaram JavaScript o que a gente quer fazer agora como ele vai fazer
não interessa Talvez ele implemente Exatamente esse algoritmo aqui talvez seja uma coisa completamente diferente hiper corra usando algum algoritmo diferente a comparação seja outra mas enfim basicamente a gente informa o que a gente quer fazer e com isso a gente atingir nosso objetivo a gente tem aqui a lista contendo apenas é um espaço então isso aqui é um mostra uma diferença Clara de como utilizar pelo menos parte de um paradigma de programação funcional um paradigma declarativo para resolver um probleminha e aqui a gente pode selecionar diversas linguagens que permitem que a gente utiliza esse paradigma
existem linguagens multiparadigmas ou seja linguagens que permitem que você Programe usando a programação funcional ou não algumas dessas linguagens são pega P ele tem o conceito de funções de primeira classe se consegue usar funções como se fosse um tipo qualquer JavaScript também ser mais mais também permite Então essas linguagens te permitem programar usando a programação funcional Mas você também pode programar usando o outro para Digno com orientação a objetos programação procedural você escolhe e existem linguagens puramente funcionais esse nome é basicamente diz que essa linguagem fornece muitas ferramentas de programação funcional e esse é o
paradigma principal é esse o Pará a linguagem se propõe a a utilizar Então quando você escreve um código implodir um restou em lisp você vai utilizar o paradigma procedural mesmo que você não conheça muito se você utilizar essa linguagem você vai estar utilizando paradigma de programação funcional por isso são linguagens que a gente chama de puramente funcionais inclusive existem cursos aqui na loira de Cláudia Onde você consegue ver na prática como é uma linguagem puramente funcional que eu recomendo vale a pena é um estudo bem interessante Então para resumir programação funcional é um paradigma de
programação declarativo onde funções são aplicadas a todo momento então a gente passa funções por parâmetro a gente retorna a funções de outras funções e existem diversos conceitos que vale a pena um estudo aprofundado conheça os cursos de programação da lura em Java Python ser Sharp php.net Closure mais além dos cursos de computação com boas práticas exercícios para fazer da sua paixão a sua profissão meditar com a gente E aí [Música] [Aplausos] E aí