FGSL 2017 Programação Funcional

Documentos relacionados
Principais paradigmas de programação. Programação imperativa Programação funcional Programação lógica Programação OO

Linguagens de Programação Funcional

Linguagens de Programação Programação Funcional (Haskell)

Linguagens de Programação e Programação Funcional

Programação Funcional Apontamentos (Versão 1.16)

Linguagens de Programação

Programação Orientada a Objetos em Python

MINISTÉRIO DA EDUCAÇÃO CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS DIRETORIA DE GRADUAÇÃO

LAPRO I. Pontifícia Universidade Católica do Rio Grande do Sul Faculdade de Informática - FACIN. Prof. Dr. Rafael Garibotti

Conceitos de Linguagens de Programação - Características. Paavo Soeiro

Introdução a Programação

Cálculo Lambda Sem Tipos

Lambda Cálculo e Programação Funcional. Programação Funcional Bacharelado em Sistemas de Informação Maio

Linguagens Formais e Autômatos. Tiago Alves de Oliveira

1 Introdução à Programação O que é? Para que serve?... 1

Ederson Luiz da Silva Ciência da Computação. Algoritmos e Programação

Linguagem Funcional Haskell

Centro Universitário do Triângulo

Introdução à Programação Aula 03. Prof. Max Santana Rolemberg Farias Colegiado de Engenharia de Computação

Linguagens de Programação. Introdução. Carlos Bazilio

Teoria da Computação (BBC244)

Linguagens de Programação. Programação Funcional. Carlos Bazilio

Noções de compilação

Gabriel Giorisatto De Angelo Luiz Otávio Gerhardt Fernandes

Python - Variáveis e expressões

SCALA! Mariah Barros Cardoso Ruann Magalhães Homem Rudá Martinez Pimentel Deeke Yuri Pereira Constante

Nomes, vinculações e escopos

Professor: Domingos Equipe Haskell: Lucas Montesuma, Francisco Leonardo CONCEITOS DA LINGUAGEM DE PROGRAMAÇÃO CÁLCULADORA EM HASKELL

Fundamentos de Programação 1

Nomes, vinculações e escopos

A Matemática como Serviço a Ciência da Computação. Prof. Dr. Carlos Eduardo de Barros Paes Coordenador do Curso de Ciência da Computação

Marcos Castilho. DInf/UFPR. 16 de maio de 2019

Paradigmas. Fortran, Algol, Algol-68, Pascal, C, Cobol, PL/I

Introdução a Programação Orientada a Objetos

Linguagem de Programação e Compiladores

Programação I Aula 2 Apresentação da linguagem Python

C/C++ e as competições de programação Fórum Goiano de Software Livre 2014

Programação de Computadores

TRABALHO DE PROGRAMAÇÃO FUNCIONAL LINGUAGEM DE PROGRAMAÇÃO I

Ruby e JRuby em... Paralelos e Distribuídos. Felipe Barden Lucas Fialho Zawacki

Expressões e sentença de atribuição

PARADIGMAS DE LINGUAGENS DE PROGRAMAÇÃO - PLP

Histórico de Linguagens de Programação

Mineração de Dados com Big Data. Prof. Fabrício Olivetti de França Universidade Federal do ABC

Conceitos de Linguagem de Programação - 2

Algoritmos e Programação

com Big Data Fabrício Olivetti de França Universidade Federal do ABC

Paradigmas de Linguagem de Programação. Aspectos Básicos

Aula 1 Java Prof. Dr. Sylvio Barbon Junior

Laboratório de Programação 1 Algoritmos e a Lógica de Programação

Fundamentos de Programação 1

Algoritmos e Programação

Linguagem Haskell. Universidade Estadual Santa Cruz Conceitos de Linguagens de Programação. Tiago Carneiro 19 Agosto 2013

Introdução à Computação: Máquinas Multiníveis

Linguagens Formais e Autômatos (BBC242) Professor: Anderson Almeida Ferreira DECOM-UFOP

Projeto de software Estrutura do software e arquitetura SWEBOK

Transcrição:

Programação Funcional λfλx.f(f(fx)) motivos para aprender

Sobre Mim Arquiteto de Software na TOTVS Goiânia Equipe de Framework, Engenharia e Inovação Centenas de milhares de linhas de códigos escritas +1000 Litros de café bebidos -10 anos de expectativa de vida Java paga meu salário mas queria mesmo era estar programando em Haskell

Haskell FGSL 2017

Existem duas maneiras de se construir o desenho de um software: Uma maneira é fazê-lo de um modo tão simples onde obviamente não se há deficiências, a outra é fazê-lo de um modo tão complicado onde não se há deficiências óbvias. A primeira maneira é muito mais difícil. Charles Hoare ( Prêmio Turing 1980 ) Nossa habilidade de se decompor problemas em pequenas partes depende diretamente da nossa capacidade de se juntar tudo isso novamente. John Hughes ( Why functional programming matters )

O que é? É um paradigma de programação. É um modo de se programar utilizando funções puras, evitando estados compartilhados, mutabilidade e efeitos adversos. É declarativa ao invés de imperativa. É linda s2

Origem Alonzo Church Orientador de Doutorado do Alan Turing λ-calculus Tese de Church-Turing É antiga pra caralho Uma das primeiras implementações foi o LISP.

λ-calculus Base matemática das linguagens funcionais Sistema matemático formal A Linguagem de programação mais simples Modelo universal de computação Se roda em uma máquina de turing, pode ser representado em cálculo lambda.

λ-calculus Variáveis Expressão λxλy. x+y Aplicação

λ-calculus λfλx.f(f(fx)) = 3

Motivo λfλx = fx Quase SEM EFEITOS ADVERSOS =O

Sem efeitos adversos FGSL 2017

Sem efeitos adversos Funções Puras Transparência Referencial Imutabilidade Mônadas ( são apenas monóides na categoria dos endofunctores )

Funções Puras São funções que dadas as entradas, ela SEMPRE retornará o MESMO resultado. Não produz efeitos adversos OBSERVÁVEIS.

Funções Puras def f(x: Int, y: Int) = x + y

Funções Puras def f(x: Int, y: Int) = x + y Pura

Funções Puras def seq(i: Int) = { var soma = 0 0 to i foreach((i) => soma = soma + i) soma }

Transparência Referencial Uma função é dada como transparente quando a sua aplicação independe do contexto no qual ela é executada.

Transparência Referencial def quadrado(x:int) = x * x

Transparência Referencial var num = 2 def dividir(x: Int) = { num = num/x num }

Imutabilidade Em linguagens puramente funcionais, os tipos são naturalmente IMUTÁVEIS. Evita acoplamento temporal Facilita paralelismo

Imutabilidade Email email = new SimpleEmail(); email.setfrom("ygor.santana@totvs.com.br", "Ygor Castor ); email.addto("fgsl2017@google.com"); email.setsubject("olá FGSL!");... email.send();

Imutabilidade MailSender sender = new MailSender(new ConfigSmtp("smtp", 465, "user", "pwd") ); Message msg = new Message(Remetente.of("Ygor Castor", ygor.santana@totvs.com.br), Destinatarios.of("fgsl2017@gmail.com"), "Olá FGSL!"); sender.send(msg);

Programação Imperativa FGSL 2017

Programação Funcional FGSL 2017

Como assim, quase? Programas completamente sem efeitos adversos são praticamente impossíveis de serem feitos. I/O e Aleatoriedade sempre estarão presentes no seu código.

Mônadas ao resgate Mônadas são amplificadoras de tipos. São Construtores Computacionais Definem comportamentos Lembram vagamente a Command Pattern do OO Modelam Efeitos Adversos

Mônadas instance Monad Maybe where return x = Just x Nothing >>= f = Nothing Just x >>= f = f x fail _ = Nothing

Mônadas safelog :: (Floating a, Ord a) => a -> Maybe a safelog x x > 0 = Just (log x) otherwise = Nothing

Mônadas FGSL 2017

Motivo λfλx = f(fx) É naturalmente paralelizável

Paralelismo Natural Não existem estados compartilhados Se as funções são puras, Beta reduções podem ocorrer em qualquer ordem (Propriedade de Church-Rosser) Execução Previsível Otimização

Motivo λfλx = f(f(fx) Virou modinha Princípios estão sendo aplicados nas linguagens mais usadas

Adoção O paradigma funcional está ganhando muito espaço no momento. Linguagens mainstream adotando princípios: Java, C#, C++, Ruby, Python,... Linguagens tecnicamente funcionais: Javascript Linguagens Funcionais: Erlang, Elixir, LISP, Clojure, Scala Linguagens Puramente Funcionais: Idris, Haskell, ELM

Adoção - Uso no mundo real NuBank: Serviços em Clojure, uso de Clojurescript Google: Haskell nos filtros de Spam Facebook: Erlang no Chat, Haskell nos filtros de Spam Discord: Elixir para controlar os chats Pivotal: Erlang no RabbitMQ Mozilla: A Servo engine é escrita em Rust Twitter: Scala

Adoção - Exemplo - XMONAD https://github.com/xmonad/xmonad

Como aprender? https://www.edx.org/course/introduction-functional-program ming-delftx-fp101x-0 - Introdução a programação funcional em haskell, com o pica das galáxias do Eric Meijer. https://www.coursera.org/learn/progfun1 https://www.edx.org/course/paradigms-computer-programmi ng-louvainx-louv1-1x-2#.vkwu9ayvlpk https://mitpress.mit.edu/sicp/full-text/book/book.html <- MELHOR LIVRO https://www.amazon.com/concepts-techniques-models-co mputer-programming/dp/0262220695 <- Van Roy é o pica

Dúvidas? FGSL 2017

Contato E-Mail: ygorcastor@gmail.com LinkedIn: https://www.linkedin.com/in/ygorca stor/