Engenheira de software & cientista da computação Programming languages, crypto, web Gêmeos ascendente em escorpião Sometimes speaker, sometimes community manager, always shitposter Ana Luiza Portello Bastos
CALCULO LAMBDA O sistema formal do calculo lambda foi definido nos anos 30 pelo Alonzo Church para explorar a computabilidade com definição de funções e recursão.
LAMBDA CALCULUS λx . x + 1 (a) (head) (body) (outra expressao) expressão A solução de um problema é feita por meio de funções, usando uma implementação um conjunto de primitivas e regras pra construir esses primitivas
A cabeça define uma função e seus parametros formais(x), e o corpo a expressão (x + 1). Função que recebe x a qual adiciona x a 1 λx . x + 1 (a) (head) (body) (outra expressao) expressão
CALCULO LAMBDA 1932 - "A set of postulates for the foundation of logic" 1936 - untyped lambda calculus 1940 - typed lambda calculus 1960 - Passam a aplicar o sistema lógico em linguagens de programação
Mas até poucos anos atrás computadores não eram tão rapidos quanto hoje em dia e tinham bem pouco poder de processamento. Pra isso era importante utilizar linguagens que possibilitassem uma economia na memória e para isso linguagens imperativas que lidavam bem com a memória e faziam tarefas de forma procedural ficaram em alta.
OO Massa do cupcake tem um estado(self ou this) Esse estado é MUTAVEL E os metodos vão constantemente mudar esse estado Existe uma ordem pra que tudo seja feito(É imperativo)
DECLARATIVAS - Descreve o "o que" ao invés do "como" - Descreve do "input" os valores do "output" ao invés de pensar na manipulação de variaveis na memoria.
DECLARATIVA Normalmente fazemos uma massa doce com proporcoes x de leite, farinha e açucar Fermento faz a massa crescer A massa cresce 30 por minutos ate ficar boa pra assar O forno é o lugar em que assamos bolo A forma ideal é diferente para se queremos bolo, cupcake ou pão Por assar entendemos colocar a massa sob uma temperatura de 200c ou por 40 minutos no microondas.
OOP x FUNCIONAL - Dados e comportamento são separados - OOP muda estado enquanto fp faz os dados fluirem - Um é declarativo outro imperativo - Base teorica por trás
OOP x FUNCIONAL Foco do programador Como executar tarefas (algoritmos) e como controlar alterações no estado. Informações que é desejada e que transformações são necessárias. Alterações de estado Importante. Inexistente. Ordem de execução Importante. Baixa importância. Controle de fluxo primária Loop, condições, e chamadas de função (método). Chamadas de função, incluindo a recursão. Unidade principal de manipulação Instâncias das classes ou estruturas. Funções como objetos de primeira classe e coleções de dados. https://docs.microsoft.com/pt-br/dotnet/standard/linq/functional-vs-imperative-programming
● Mil bibliotecas diferentes ● Atualizações melhorando a linguagem ● Padrões de codigo ● Já que as mutações não são seguras podemos procurar aplicar padrões que garantem um código mais bug free
https://medium.com/outsystems-engineering/programming-without-state-chaos-6b3dbbd58b7e Se funções fossem 100% independente não teriamos patifarias escondidas. Isso é similar ao que a gente vê como funções matematicas, input e um output. Esse estilo chama-se
https://medium.com/outsystems-engineering/programming-without-state-chaos-6b3dbbd58b7e - Mutações de qualquer varíavel ou objeto - Logs - I/O - Banco de dados - API - Fazer trigger de algum processo
IDEPOTENCIA Em funções puramente matematicas não existe a possibilidade de chamar a mesma função com os mesmos valores duas vezes e dar diferentes resultados
PUREZA Quando as funções são puras, ou seja, independentes de estado ou do ambiente, não precisamos dar a mínima importância para quando ou onde elas serão computadas.
- O dominio do que é estado e o que é logica - Pequenas modificações tocam um estado espalhado pela aplicação - Em caso de algo falhar, ou concorrencia estamos mais prunes a erros
● O estado aumenta a complexidade e torna dificil de "reason about" problemas locais. ● A solução é isolar o estado e aumentar o codigo puro ● Se você precisa de umestado local, encapsule-o em funções puras. ● Side Effects são necessarios, mas podem ficar isolados e abstraidos ● Testar funções puras é só questão de checar um valor de retorno!
MOTIVACAO ● Mantenabilidade de código ● Menos bugs ● Testar se torna uma tarefa facil! ● Muito mais facil lidar com estado! ● Front end: estado imutavel, declaratividade ● Lidar com o caos que é o estado
NA PRATICA As vezes você vai precisar sacrificar pureza por performance, limitações da linguagem ou por simplicidade. Nesse caso o ideal é tentar encapsular o estado ou tentar de alguma forma isolar o efeito colateral.
NA PRATICA Se em programação funcional tudo são funções como lidamos com estas funções? A ideia é que cada uma delas tenha uma unica responsabilidade dentro de um contexto
● Em linguagens procedurais nossas computações envolvem nosso código separado em modulos operando em dados. ● Já em linguagens orientadas a objetos encapsulamos nosso código e dados para que eles interajam entre si por meio de mensagens.
COMPOSICAO Aluno foi aprovado? ● Fazer a média dos trabalhos e provas ● Incrementa 1 se o aluno tem nota de participação ● Se for maior que 6 está provado
PIPE Pipeline em ciência da computação é todo tipo de processamento de dados conectado em série em que a saída de um elemento é a entrada do proximo similar ao pipe do UNIX.
Resolver com PIPE! Aluno foi aprovado? ● Fazer a média dos trabalhos e provas ● Incrementa 1 se o aluno tem nota de participação ● Se for maior que 6 está provado
HOF A ideia de que funções são entidades primarias. Elas são tratadas como valores e usados como dados! - Passadas como paramentros - Passadas como resposta de uma função
Essas funções são parecidas, a unica diferença é o operador. Se podemos tratar funções como valores e passa-los como argumentos, pq não passar a operação por argumento?
CREDITS: This presentation template was created by Slidesgo, including icons by Flaticon and infographics & images by Freepik Perguntas? [email protected] anabastos.dev Contact @naluhh anabastos