SlideShare uma empresa Scribd logo
1 de 21
Baixar para ler offline
Introdução
Myself
------
Luiz Stangarlin
Trabalho
--------
principal: 'Full-Stack' Developer
secundario: Networking, Infosec, Sysadmin (private & public cloud)
Estudo
------
Computação Grafica, VR/AR.
Programming Languages & Compilers (Here be dragons!)
Hobby
-----
Musica - electric guitar
Eletrônica
Games
Motivo
Dar um panorama da área de programação e introduzir o paradigma e como ele
se encaixa no cenário da computação.
É mais fácil aprender quando se ter um motivo.
Comparar como um mesmo conceito pode ser implementado sobre o paradigma
funcional e OO ao mesmo tempo.
Computação
Antiga busca matematica por uma forma de resolver teoremas automaticamente.
Foi provado que nem todos teoremas podem ser automaticamente provados.
Porem alguns podem, usando processamento de simbolos, o que funda a
Computação.
Computação
Alonzo Church Turing
------------- ------
Matematica Tecnologia/Ferramentas
O que fazer Como fazer
Top-down Bottom-up
Matematico Hacker
Teoria Prática
Imperativo/OO Funcional
Church-Turing thesis, prova que ambos as duas formas são equivalentes.
A computação é a junção das duas formas de pensar.
Programação funcional
Circa ~1970, todos os principais paradigmas (Imperativo, OO, FP)
Porque agora?
. O hardware era limitado no começo.
. O hardware teve um incrível desenvolvimento, possibilitou
grande sucesso do paradigma imperativo, e ocultou problemas.
. Crescimento vertical
O que ocorreu?
. Hardware agora é menos limitado
. Dark-Silicon, Von Neumann Bottleneck
. Crescimento horizontal
. Mais nucleos, processamento paralelo, GPU
Complexidade
. Velho inimigo (crise do software I)
Linguagens, Paradigmas e conceitos
Linguagens, Paradigmas e conceitos
Linguagens, Paradigmas e conceitos
Uma forma de mapear e entender a grande quantidade de ferramentas
e linguagens.
Uma forma de categorizar as linguagens, e comparar suas características.
Mais importante do que saber tudo o que existe, é aprender a navegar na
"bagunça".
(Meu objetivo silly era aprender todas, então um método era necessário)
O que é FP?
O paradigma descreve o que e não como é feito, sendo assim declarativo.
. First class functions (math: high-order function).
Função são dados, lambdas.
. Pure functions.
Funções cuja saída é apenas resultado de seus parâmetros.
. Immutable data.
Sem variáveis, retornar novos dados no retorno das funções.
(pesquisa: estruturas de dados imutáveis eficientes
para evitar cópias excessivas)
. Composição,
Input de uma função gera a saída da próxima,
função usa outras funções e retorna uma nova função.
. Closures.
Quando uma variáveis usadas na função são vinculadas ao escopo
O que é FP?
. First class functions
. Immutable data
. Pure functions
. Composição
O que é FP?
. Closures
Conceito: SOLID
S - Single responsibility principle
O - Open/closed principle
L - Liskov substitution principle
I - Interface segregation principle
D - Dependency inversion principle
Barbara Liskov (et al.)
Princípio da responsabilidade única
A classe/função/módulo deve ter apenas uma responsabilidade.
Uma função pura é algo com uma responsabilidade, transformar
sua entrada na saída. O que poderia ser mais simples?
Princípio Aberto/Fechado
Entidades de software devem ser abertas (ter a possibilidade)
para extensão e fechadas para modificação.
Em FP ao se usar funções de primeira ordem já se respeita este
princípio, tu não precisa modificar a função se tu pode criar
uma nova função que usa a outra e estende o comportamento dela.
Princípio de substituição de Liskov
Objeto em um programa devem ser substituíveis por instâncias
de seus subtipos sem que o comportamento correto do software
se altere.
Em FP, o mesmo princípio se aplica ao se passar lambdas.
Princípio de substituição de Liskov
Simulando polimorfismo em FP.
Interface segregation principle
Muitas interfaces específicas são melhores que uma única
interface de proposito geral.
Este é o principio de FP ao se levar ao limite a ideia,
cada função é uma interface específica por sí só.
Princípio de inversão de dependência
Se deve depender na abstração e não na implementação concreta.
Aqui é onde o paradigma brilha, Funções de primeira classe
são exatamente o princípio de inversão em ação, é tão natural
expressar isto em FP, que quase não se percebe.
Migrando para FP
Ao mover de OO para FP:
. Composição ao invés de herança.
(na verdade mesmo em OO, tu deve considerar este ponto)
. Pense sobre dados imutáveis.
Os dados fluem entre as functions, ao invés de usar "=" atribuição.
. Funções fazem um único trabalho, ao invés de ter classes.
. Use o princípio de substituição de Liskov.
Finalizando
Princípios e conceitos sobre desenvolvimento de software se
aplicam a vários paradigmas.
Se você programa em OO e conhece estes princípios da boa
construção de software, você já tem o que é preciso para
aprender e usar FP.
Sources
Referencias:
http://blog.ploeh.dk/2014/03/10/solid-the-next-step-is-functional/
https://fsharpforfunandprofit.com/fppatterns/
https://pt.slideshare.net/velvetflair/functional-programming-fundamentals
https://medium.com/javascript-scene/the-two-pillars-of-javascript-pt-2-funct
ional-programming-a63aa53a41a4
https://gist.github.com/Byte-666/f66c689e8a2fcd5cf1a0450d23f09b7e
https://www.info.ucl.ac.be/~pvr/VanRoyChapter.pdf
https://www.youtube.com/watch?v=ibRar7sWulM (Barbara Liskov: Programming the
Turing Machine)
Extra:
https://www.youtube.com/watch?v=IOiZatlZtGU (Philip Wadler: Propositions as
Types)
https://www.youtube.com/watch?v=VpzhH9CXOy0 (Paulo Torrens: Lógica de
Programação não existe)
https://github.com/papers-we-love/papers-we-love/blob/master/design/out-of-t
he-tar-pit.pdf

Mais conteúdo relacionado

Semelhante a Introdução à Programação Funcional e seus Princípios

Apresentação final
Apresentação finalApresentação final
Apresentação finalvalmon
 
Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.Valmon Gaudencio
 
Código limpo: Funções Capítulo 3
Código limpo: Funções  Capítulo 3Código limpo: Funções  Capítulo 3
Código limpo: Funções Capítulo 3Inael Rodrigues
 
Boas práticas no desenvolvimento de software
Boas práticas no desenvolvimento de softwareBoas práticas no desenvolvimento de software
Boas práticas no desenvolvimento de softwareFelipe
 
A importância da programação funcional no dia a-dia
A importância da programação funcional no dia a-diaA importância da programação funcional no dia a-dia
A importância da programação funcional no dia a-diaGabriel Schade Cardoso
 
Introdução Programação Funcional
Introdução Programação FuncionalIntrodução Programação Funcional
Introdução Programação FuncionalNatan Mai
 
Desmistificando a programação funcional
Desmistificando a programação funcionalDesmistificando a programação funcional
Desmistificando a programação funcionalGDGFoz
 
Livro - código limpo caps (3,4) (clean code)
Livro - código limpo caps (3,4) (clean code)Livro - código limpo caps (3,4) (clean code)
Livro - código limpo caps (3,4) (clean code)André Justi
 
Introdução à programação funcional
Introdução à programação funcionalIntrodução à programação funcional
Introdução à programação funcionalGabriel Schade Cardoso
 
Refatoração - aquela caprichada no código
Refatoração - aquela caprichada no códigoRefatoração - aquela caprichada no código
Refatoração - aquela caprichada no códigoJuciellen Cabrera
 
TDC 2015 São Paulo - Clean Code para Testers
TDC 2015 São Paulo - Clean Code para TestersTDC 2015 São Paulo - Clean Code para Testers
TDC 2015 São Paulo - Clean Code para TestersStefan Teixeira
 
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃO
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃOCURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃO
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃOMicrosoft
 

Semelhante a Introdução à Programação Funcional e seus Princípios (20)

Apresentação final
Apresentação finalApresentação final
Apresentação final
 
Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.
 
Apresentação faef
Apresentação faefApresentação faef
Apresentação faef
 
Código limpo: Funções Capítulo 3
Código limpo: Funções  Capítulo 3Código limpo: Funções  Capítulo 3
Código limpo: Funções Capítulo 3
 
Dojo solid
Dojo solidDojo solid
Dojo solid
 
Linguagem Python
Linguagem PythonLinguagem Python
Linguagem Python
 
Boas práticas no desenvolvimento de software
Boas práticas no desenvolvimento de softwareBoas práticas no desenvolvimento de software
Boas práticas no desenvolvimento de software
 
A importância da programação funcional no dia a-dia
A importância da programação funcional no dia a-diaA importância da programação funcional no dia a-dia
A importância da programação funcional no dia a-dia
 
Introdução Programação Funcional
Introdução Programação FuncionalIntrodução Programação Funcional
Introdução Programação Funcional
 
Desmistificando a programação funcional
Desmistificando a programação funcionalDesmistificando a programação funcional
Desmistificando a programação funcional
 
Livro - código limpo caps (3,4) (clean code)
Livro - código limpo caps (3,4) (clean code)Livro - código limpo caps (3,4) (clean code)
Livro - código limpo caps (3,4) (clean code)
 
Introdução à programação funcional
Introdução à programação funcionalIntrodução à programação funcional
Introdução à programação funcional
 
Refatoração - aquela caprichada no código
Refatoração - aquela caprichada no códigoRefatoração - aquela caprichada no código
Refatoração - aquela caprichada no código
 
Semanaupecaruaru2013 c++para iniciantes
Semanaupecaruaru2013 c++para iniciantesSemanaupecaruaru2013 c++para iniciantes
Semanaupecaruaru2013 c++para iniciantes
 
Java aula 2
Java aula 2Java aula 2
Java aula 2
 
TDC 2015 São Paulo - Clean Code para Testers
TDC 2015 São Paulo - Clean Code para TestersTDC 2015 São Paulo - Clean Code para Testers
TDC 2015 São Paulo - Clean Code para Testers
 
Resumo OpenMP
Resumo OpenMPResumo OpenMP
Resumo OpenMP
 
Logica Programação. ...
Logica Programação. ...Logica Programação. ...
Logica Programação. ...
 
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃO
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃOCURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃO
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃO
 
Atividade2redes
Atividade2redesAtividade2redes
Atividade2redes
 

Mais de Dev PP

Flaviano Redressa - Ionic: Porquê e como utilizar esse framework para desenvo...
Flaviano Redressa - Ionic: Porquê e como utilizar esse framework para desenvo...Flaviano Redressa - Ionic: Porquê e como utilizar esse framework para desenvo...
Flaviano Redressa - Ionic: Porquê e como utilizar esse framework para desenvo...Dev PP
 
As Possibilidades do Blockchain
As Possibilidades do BlockchainAs Possibilidades do Blockchain
As Possibilidades do BlockchainDev PP
 
Desenvolvimento Gereencial - A importancia da Visão Sistêmica Para o seu Negócio
Desenvolvimento Gereencial - A importancia da Visão Sistêmica Para o seu NegócioDesenvolvimento Gereencial - A importancia da Visão Sistêmica Para o seu Negócio
Desenvolvimento Gereencial - A importancia da Visão Sistêmica Para o seu NegócioDev PP
 
Intodução ao React
Intodução ao ReactIntodução ao React
Intodução ao ReactDev PP
 
E-commerce no Brasil
E-commerce no BrasilE-commerce no Brasil
E-commerce no BrasilDev PP
 
Sistemas de Comunicação em Tempo Real
Sistemas de Comunicação em Tempo RealSistemas de Comunicação em Tempo Real
Sistemas de Comunicação em Tempo RealDev PP
 
SCRUM - Produzindo Mais com Menos Tempo
SCRUM - Produzindo Mais com Menos TempoSCRUM - Produzindo Mais com Menos Tempo
SCRUM - Produzindo Mais com Menos TempoDev PP
 
Banco de Dados Realtime com Firebase
Banco de Dados Realtime com FirebaseBanco de Dados Realtime com Firebase
Banco de Dados Realtime com FirebaseDev PP
 
HTML Robusto e Elegante com Template Engines
HTML Robusto e Elegante com Template EnginesHTML Robusto e Elegante com Template Engines
HTML Robusto e Elegante com Template EnginesDev PP
 
Infraestrutura com AWS
Infraestrutura com AWSInfraestrutura com AWS
Infraestrutura com AWSDev PP
 
React Native - Produtividade e eficiência no desenvolvimento mobile
React Native - Produtividade e eficiência no desenvolvimento mobileReact Native - Produtividade e eficiência no desenvolvimento mobile
React Native - Produtividade e eficiência no desenvolvimento mobileDev PP
 
SEO para Devs
SEO para DevsSEO para Devs
SEO para DevsDev PP
 
Criptografia
CriptografiaCriptografia
CriptografiaDev PP
 
Acessibilidade na web
Acessibilidade na webAcessibilidade na web
Acessibilidade na webDev PP
 
Construindo uma Carreira Internacional em Desenvolvimento
Construindo uma Carreira Internacional em DesenvolvimentoConstruindo uma Carreira Internacional em Desenvolvimento
Construindo uma Carreira Internacional em DesenvolvimentoDev PP
 
Progressive Web Apps (PWA)
Progressive Web Apps (PWA)Progressive Web Apps (PWA)
Progressive Web Apps (PWA)Dev PP
 

Mais de Dev PP (16)

Flaviano Redressa - Ionic: Porquê e como utilizar esse framework para desenvo...
Flaviano Redressa - Ionic: Porquê e como utilizar esse framework para desenvo...Flaviano Redressa - Ionic: Porquê e como utilizar esse framework para desenvo...
Flaviano Redressa - Ionic: Porquê e como utilizar esse framework para desenvo...
 
As Possibilidades do Blockchain
As Possibilidades do BlockchainAs Possibilidades do Blockchain
As Possibilidades do Blockchain
 
Desenvolvimento Gereencial - A importancia da Visão Sistêmica Para o seu Negócio
Desenvolvimento Gereencial - A importancia da Visão Sistêmica Para o seu NegócioDesenvolvimento Gereencial - A importancia da Visão Sistêmica Para o seu Negócio
Desenvolvimento Gereencial - A importancia da Visão Sistêmica Para o seu Negócio
 
Intodução ao React
Intodução ao ReactIntodução ao React
Intodução ao React
 
E-commerce no Brasil
E-commerce no BrasilE-commerce no Brasil
E-commerce no Brasil
 
Sistemas de Comunicação em Tempo Real
Sistemas de Comunicação em Tempo RealSistemas de Comunicação em Tempo Real
Sistemas de Comunicação em Tempo Real
 
SCRUM - Produzindo Mais com Menos Tempo
SCRUM - Produzindo Mais com Menos TempoSCRUM - Produzindo Mais com Menos Tempo
SCRUM - Produzindo Mais com Menos Tempo
 
Banco de Dados Realtime com Firebase
Banco de Dados Realtime com FirebaseBanco de Dados Realtime com Firebase
Banco de Dados Realtime com Firebase
 
HTML Robusto e Elegante com Template Engines
HTML Robusto e Elegante com Template EnginesHTML Robusto e Elegante com Template Engines
HTML Robusto e Elegante com Template Engines
 
Infraestrutura com AWS
Infraestrutura com AWSInfraestrutura com AWS
Infraestrutura com AWS
 
React Native - Produtividade e eficiência no desenvolvimento mobile
React Native - Produtividade e eficiência no desenvolvimento mobileReact Native - Produtividade e eficiência no desenvolvimento mobile
React Native - Produtividade e eficiência no desenvolvimento mobile
 
SEO para Devs
SEO para DevsSEO para Devs
SEO para Devs
 
Criptografia
CriptografiaCriptografia
Criptografia
 
Acessibilidade na web
Acessibilidade na webAcessibilidade na web
Acessibilidade na web
 
Construindo uma Carreira Internacional em Desenvolvimento
Construindo uma Carreira Internacional em DesenvolvimentoConstruindo uma Carreira Internacional em Desenvolvimento
Construindo uma Carreira Internacional em Desenvolvimento
 
Progressive Web Apps (PWA)
Progressive Web Apps (PWA)Progressive Web Apps (PWA)
Progressive Web Apps (PWA)
 

Introdução à Programação Funcional e seus Princípios

  • 1. Introdução Myself ------ Luiz Stangarlin Trabalho -------- principal: 'Full-Stack' Developer secundario: Networking, Infosec, Sysadmin (private & public cloud) Estudo ------ Computação Grafica, VR/AR. Programming Languages & Compilers (Here be dragons!) Hobby ----- Musica - electric guitar Eletrônica Games
  • 2. Motivo Dar um panorama da área de programação e introduzir o paradigma e como ele se encaixa no cenário da computação. É mais fácil aprender quando se ter um motivo. Comparar como um mesmo conceito pode ser implementado sobre o paradigma funcional e OO ao mesmo tempo.
  • 3. Computação Antiga busca matematica por uma forma de resolver teoremas automaticamente. Foi provado que nem todos teoremas podem ser automaticamente provados. Porem alguns podem, usando processamento de simbolos, o que funda a Computação.
  • 4. Computação Alonzo Church Turing ------------- ------ Matematica Tecnologia/Ferramentas O que fazer Como fazer Top-down Bottom-up Matematico Hacker Teoria Prática Imperativo/OO Funcional Church-Turing thesis, prova que ambos as duas formas são equivalentes. A computação é a junção das duas formas de pensar.
  • 5. Programação funcional Circa ~1970, todos os principais paradigmas (Imperativo, OO, FP) Porque agora? . O hardware era limitado no começo. . O hardware teve um incrível desenvolvimento, possibilitou grande sucesso do paradigma imperativo, e ocultou problemas. . Crescimento vertical O que ocorreu? . Hardware agora é menos limitado . Dark-Silicon, Von Neumann Bottleneck . Crescimento horizontal . Mais nucleos, processamento paralelo, GPU Complexidade . Velho inimigo (crise do software I)
  • 8. Linguagens, Paradigmas e conceitos Uma forma de mapear e entender a grande quantidade de ferramentas e linguagens. Uma forma de categorizar as linguagens, e comparar suas características. Mais importante do que saber tudo o que existe, é aprender a navegar na "bagunça". (Meu objetivo silly era aprender todas, então um método era necessário)
  • 9. O que é FP? O paradigma descreve o que e não como é feito, sendo assim declarativo. . First class functions (math: high-order function). Função são dados, lambdas. . Pure functions. Funções cuja saída é apenas resultado de seus parâmetros. . Immutable data. Sem variáveis, retornar novos dados no retorno das funções. (pesquisa: estruturas de dados imutáveis eficientes para evitar cópias excessivas) . Composição, Input de uma função gera a saída da próxima, função usa outras funções e retorna uma nova função. . Closures. Quando uma variáveis usadas na função são vinculadas ao escopo
  • 10. O que é FP? . First class functions . Immutable data . Pure functions . Composição
  • 11. O que é FP? . Closures
  • 12. Conceito: SOLID S - Single responsibility principle O - Open/closed principle L - Liskov substitution principle I - Interface segregation principle D - Dependency inversion principle Barbara Liskov (et al.)
  • 13. Princípio da responsabilidade única A classe/função/módulo deve ter apenas uma responsabilidade. Uma função pura é algo com uma responsabilidade, transformar sua entrada na saída. O que poderia ser mais simples?
  • 14. Princípio Aberto/Fechado Entidades de software devem ser abertas (ter a possibilidade) para extensão e fechadas para modificação. Em FP ao se usar funções de primeira ordem já se respeita este princípio, tu não precisa modificar a função se tu pode criar uma nova função que usa a outra e estende o comportamento dela.
  • 15. Princípio de substituição de Liskov Objeto em um programa devem ser substituíveis por instâncias de seus subtipos sem que o comportamento correto do software se altere. Em FP, o mesmo princípio se aplica ao se passar lambdas.
  • 16. Princípio de substituição de Liskov Simulando polimorfismo em FP.
  • 17. Interface segregation principle Muitas interfaces específicas são melhores que uma única interface de proposito geral. Este é o principio de FP ao se levar ao limite a ideia, cada função é uma interface específica por sí só.
  • 18. Princípio de inversão de dependência Se deve depender na abstração e não na implementação concreta. Aqui é onde o paradigma brilha, Funções de primeira classe são exatamente o princípio de inversão em ação, é tão natural expressar isto em FP, que quase não se percebe.
  • 19. Migrando para FP Ao mover de OO para FP: . Composição ao invés de herança. (na verdade mesmo em OO, tu deve considerar este ponto) . Pense sobre dados imutáveis. Os dados fluem entre as functions, ao invés de usar "=" atribuição. . Funções fazem um único trabalho, ao invés de ter classes. . Use o princípio de substituição de Liskov.
  • 20. Finalizando Princípios e conceitos sobre desenvolvimento de software se aplicam a vários paradigmas. Se você programa em OO e conhece estes princípios da boa construção de software, você já tem o que é preciso para aprender e usar FP.
  • 21. Sources Referencias: http://blog.ploeh.dk/2014/03/10/solid-the-next-step-is-functional/ https://fsharpforfunandprofit.com/fppatterns/ https://pt.slideshare.net/velvetflair/functional-programming-fundamentals https://medium.com/javascript-scene/the-two-pillars-of-javascript-pt-2-funct ional-programming-a63aa53a41a4 https://gist.github.com/Byte-666/f66c689e8a2fcd5cf1a0450d23f09b7e https://www.info.ucl.ac.be/~pvr/VanRoyChapter.pdf https://www.youtube.com/watch?v=ibRar7sWulM (Barbara Liskov: Programming the Turing Machine) Extra: https://www.youtube.com/watch?v=IOiZatlZtGU (Philip Wadler: Propositions as Types) https://www.youtube.com/watch?v=VpzhH9CXOy0 (Paulo Torrens: Lógica de Programação não existe) https://github.com/papers-we-love/papers-we-love/blob/master/design/out-of-t he-tar-pit.pdf