introdução a programação funcional com elixir
TRANSCRIPT
![Page 1: Introdução a programação funcional com Elixir](https://reader034.vdocuments.net/reader034/viewer/2022052705/58a465a91a28abb8288b5fc3/html5/thumbnails/1.jpg)
Introdução a programação
funcional com Elixir
Arthur Braga Alfredo
![Page 2: Introdução a programação funcional com Elixir](https://reader034.vdocuments.net/reader034/viewer/2022052705/58a465a91a28abb8288b5fc3/html5/thumbnails/2.jpg)
O que é programaçãofuncional?
É um paradigma de programação que trata acomputação como funções matemáticas e que evita
estados e dados mutáveis
![Page 3: Introdução a programação funcional com Elixir](https://reader034.vdocuments.net/reader034/viewer/2022052705/58a465a91a28abb8288b5fc3/html5/thumbnails/3.jpg)
Um pouco de história
Programação funcional foi inventada em 1957Antes da orientação a objetosAntes da programação estruturada
O Lisp foi criado no MIT em 1960ISWIM em 1966SASL em 1973Miranda e Erlang em 1986Haskell em 1992
![Page 4: Introdução a programação funcional com Elixir](https://reader034.vdocuments.net/reader034/viewer/2022052705/58a465a91a28abb8288b5fc3/html5/thumbnails/4.jpg)
Quais eram os objetivos?
Programas mais simplesPoucos problemas de concorrênciaNão precisa se preocupar com estado
![Page 5: Introdução a programação funcional com Elixir](https://reader034.vdocuments.net/reader034/viewer/2022052705/58a465a91a28abb8288b5fc3/html5/thumbnails/5.jpg)
Porque não deu certonaquela época?
![Page 6: Introdução a programação funcional com Elixir](https://reader034.vdocuments.net/reader034/viewer/2022052705/58a465a91a28abb8288b5fc3/html5/thumbnails/6.jpg)
Memória era muito cara
![Page 7: Introdução a programação funcional com Elixir](https://reader034.vdocuments.net/reader034/viewer/2022052705/58a465a91a28abb8288b5fc3/html5/thumbnails/7.jpg)
Os computadores eram lentos
![Page 8: Introdução a programação funcional com Elixir](https://reader034.vdocuments.net/reader034/viewer/2022052705/58a465a91a28abb8288b5fc3/html5/thumbnails/8.jpg)
O que mudou?
![Page 9: Introdução a programação funcional com Elixir](https://reader034.vdocuments.net/reader034/viewer/2022052705/58a465a91a28abb8288b5fc3/html5/thumbnails/9.jpg)
![Page 10: Introdução a programação funcional com Elixir](https://reader034.vdocuments.net/reader034/viewer/2022052705/58a465a91a28abb8288b5fc3/html5/thumbnails/10.jpg)
![Page 11: Introdução a programação funcional com Elixir](https://reader034.vdocuments.net/reader034/viewer/2022052705/58a465a91a28abb8288b5fc3/html5/thumbnails/11.jpg)
![Page 12: Introdução a programação funcional com Elixir](https://reader034.vdocuments.net/reader034/viewer/2022052705/58a465a91a28abb8288b5fc3/html5/thumbnails/12.jpg)
Criada por José Valim
![Page 13: Introdução a programação funcional com Elixir](https://reader034.vdocuments.net/reader034/viewer/2022052705/58a465a91a28abb8288b5fc3/html5/thumbnails/13.jpg)
Objetivo
Criar uma linguagem que que possibilitasse altaperformance, extensibilidade e produtividade e que
rodasse na VM do Erlang.
![Page 14: Introdução a programação funcional com Elixir](https://reader034.vdocuments.net/reader034/viewer/2022052705/58a465a91a28abb8288b5fc3/html5/thumbnails/14.jpg)
Porque Erlang?
Criado em 1986 para resolver problemas na área detelefonia.Altamente tolerante a falhas (Let it crash).Altamente concorrenteFácil de escalar
![Page 15: Introdução a programação funcional com Elixir](https://reader034.vdocuments.net/reader034/viewer/2022052705/58a465a91a28abb8288b5fc3/html5/thumbnails/15.jpg)
Chega de história...
![Page 16: Introdução a programação funcional com Elixir](https://reader034.vdocuments.net/reader034/viewer/2022052705/58a465a91a28abb8288b5fc3/html5/thumbnails/16.jpg)
Imutabilidade
Uma vez que um objeto foi criado, ele não pode seralterado
![Page 17: Introdução a programação funcional com Elixir](https://reader034.vdocuments.net/reader034/viewer/2022052705/58a465a91a28abb8288b5fc3/html5/thumbnails/17.jpg)
Single matching
A variável só pode receber valor uma vez
![Page 18: Introdução a programação funcional com Elixir](https://reader034.vdocuments.net/reader034/viewer/2022052705/58a465a91a28abb8288b5fc3/html5/thumbnails/18.jpg)
![Page 19: Introdução a programação funcional com Elixir](https://reader034.vdocuments.net/reader034/viewer/2022052705/58a465a91a28abb8288b5fc3/html5/thumbnails/19.jpg)
Re-binding
Posso reutilizar uma variável para apontar para outrovalor da memória
![Page 20: Introdução a programação funcional com Elixir](https://reader034.vdocuments.net/reader034/viewer/2022052705/58a465a91a28abb8288b5fc3/html5/thumbnails/20.jpg)
![Page 21: Introdução a programação funcional com Elixir](https://reader034.vdocuments.net/reader034/viewer/2022052705/58a465a91a28abb8288b5fc3/html5/thumbnails/21.jpg)
First-class functions
Funções que podem ser armazenadas em variáveis
![Page 22: Introdução a programação funcional com Elixir](https://reader034.vdocuments.net/reader034/viewer/2022052705/58a465a91a28abb8288b5fc3/html5/thumbnails/22.jpg)
![Page 23: Introdução a programação funcional com Elixir](https://reader034.vdocuments.net/reader034/viewer/2022052705/58a465a91a28abb8288b5fc3/html5/thumbnails/23.jpg)
Higher-order functions
Funções que podem receber outras funções comoparâmetro
![Page 24: Introdução a programação funcional com Elixir](https://reader034.vdocuments.net/reader034/viewer/2022052705/58a465a91a28abb8288b5fc3/html5/thumbnails/24.jpg)
![Page 25: Introdução a programação funcional com Elixir](https://reader034.vdocuments.net/reader034/viewer/2022052705/58a465a91a28abb8288b5fc3/html5/thumbnails/25.jpg)
Pure functions
Funções sem efeitos colateraisNão acessam bancoNão acessam arquivosVão sempre retornar os mesmo valores se osmesmos parâmetros forem passados
![Page 26: Introdução a programação funcional com Elixir](https://reader034.vdocuments.net/reader034/viewer/2022052705/58a465a91a28abb8288b5fc3/html5/thumbnails/26.jpg)
Closures
Funções que pode acessar variáveis fora do seu escopo
![Page 27: Introdução a programação funcional com Elixir](https://reader034.vdocuments.net/reader034/viewer/2022052705/58a465a91a28abb8288b5fc3/html5/thumbnails/27.jpg)
![Page 28: Introdução a programação funcional com Elixir](https://reader034.vdocuments.net/reader034/viewer/2022052705/58a465a91a28abb8288b5fc3/html5/thumbnails/28.jpg)
Recursão
Funções que chamam elas mesmas
![Page 29: Introdução a programação funcional com Elixir](https://reader034.vdocuments.net/reader034/viewer/2022052705/58a465a91a28abb8288b5fc3/html5/thumbnails/29.jpg)
![Page 30: Introdução a programação funcional com Elixir](https://reader034.vdocuments.net/reader034/viewer/2022052705/58a465a91a28abb8288b5fc3/html5/thumbnails/30.jpg)
Onde aprender mais?
![Page 31: Introdução a programação funcional com Elixir](https://reader034.vdocuments.net/reader034/viewer/2022052705/58a465a91a28abb8288b5fc3/html5/thumbnails/31.jpg)
Onde aprender mais?
http://elixir-lang.org/
![Page 32: Introdução a programação funcional com Elixir](https://reader034.vdocuments.net/reader034/viewer/2022052705/58a465a91a28abb8288b5fc3/html5/thumbnails/32.jpg)
Duvidas?
![Page 33: Introdução a programação funcional com Elixir](https://reader034.vdocuments.net/reader034/viewer/2022052705/58a465a91a28abb8288b5fc3/html5/thumbnails/33.jpg)
Fontes
https://medium.com/@jugoncalves/functional-programming-should-be-your-1-priority-for-2015-47dd4641d6b9#.4cvicgxavhttp://www.elixirdose.com/post/basicfphttp://www.sitepoint.com/functional-programming-techniques-with-ruby-part-i/https://speakerdeck.com/stratus3d/foray-into-functional-programming-with-elixirhttps://speakerdeck.com/mfilej/elixir-for-rubyistshttps://www.youtube.com/watch?v=7Zlp9rKHGD4