PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli...
Transcript of PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli...
![Page 1: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/1.jpg)
PROGRAMAÇÃO
PURAMENTE
FUNCIONAL NA
JVM
ABSTRAÇÕES FUNDAMENTAIS
PAULO “JCRANKY” SIQUEIRA
![Page 2: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/2.jpg)
PA U L O “ J C R A N K Y ” S I Q U E I R A
p a u l o . s i q u e i r a @ z a l a n d o . d e
p a u l o . s i q u e i r a @ g m a i l . c o m
D D - M M - Y Y Y Y
B R A N D S O L U T I O N S
S O F T WA R E E N G I N E E E R
![Page 3: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/3.jpg)
3
T Ó P I C O S
Background
Programação Funcional
Abstrações
Programação Funcional Avançada
Conclusões
![Page 4: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/4.jpg)
4
![Page 5: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/5.jpg)
5
MICRO-SERVIÇOS
![Page 6: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/6.jpg)
6
![Page 7: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/7.jpg)
7
J AVASC A L A
G OPYT H O N
ET C
H T T PS: / /G IT H U B .C O M /Z A L A N D O / T E C H - R A D A R
A L I N G U A G E M Q U E Q U I S E R
![Page 8: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/8.jpg)
8
JAVA
![Page 9: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/9.jpg)
9
E MB O R A T EN H A L A M B D A S
JAVA
![Page 10: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/10.jpg)
10
SCALA
![Page 11: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/11.jpg)
11
N Ã O É P U R A ME N T E F U N C IO N A L
SCALA
![Page 12: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/12.jpg)
12
C Ó D I G O B A S EA D O EM F U N Ç Õ ES
PROGRAMAÇÃO FUNCIONAL
![Page 13: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/13.jpg)
13
PROGRAMAÇÃO FUNCIONAL
INPUT FUNÇÃO OUTPUT
![Page 14: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/14.jpg)
14
![Page 15: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/15.jpg)
15
C O D E
HEALTH ENDPOINT
![Page 16: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/16.jpg)
16
TO D O S O S EN D PO I N T S PR EC IS A M D E
A U T EN T IC A Ç Ã O . . .
REUSO
![Page 17: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/17.jpg)
17
C O PY & PA ST E TO O L S, O B JE C T S , & C H A R T S F R O M
T H E F O L L O W IN G S L ID E S
EXEMPLO: REUSO
![Page 18: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/18.jpg)
18
A U T EN T IC A Ç Ã O EXE C U TA D A A N T ES D A L Ó G IC A D A F U N Ç Ã O
EXEMPLO: LISTA DE MERCADORES
![Page 19: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/19.jpg)
19
EXEMPLO: LISTA DE MERCADORES
![Page 20: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/20.jpg)
20
SE F O R C O M PL E XO , Q U EB R E EM F U N Ç Õ ES
M EN O R ES
RESPONSABILIDADE
![Page 21: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/21.jpg)
21
O B O M E VEL H O “ P R IN C ÍP I O D A R ES PO N SA B IL ID A D E Ú N IC A ”
RESPONSABILIDADE
![Page 22: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/22.jpg)
22
SIDE-EFFECTS
![Page 23: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/23.jpg)
23
PR IN T L NL O GO D EB U G D O EX EM PL O
C A D Ê A PU R E Z A ?
SIDE-EFFECTS
![Page 24: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/24.jpg)
24
M ESM A E N T R A D A , M ESM A SA Í D A : C O M PO R TA ME N TO
PR EVI S ÍVEL
MA IS F Á C I L D E T ESTA R
PORQUE PROGRAMAÇÃO FUNCIONAL?
![Page 25: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/25.jpg)
25
R E L A Ç Ã O C O M M AT EM Á T IC A IN S P IR A N O VA S A B S T R A Ç Õ ES
PORQUE PROGRAMAÇÃO FUNCIONAL?
![Page 26: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/26.jpg)
26
G O STA D E D ESA F IO S , E SPE C IA L M EN T E C O M A
C O N STA N T E B U SC A P O R N OVA S A B ST R A Ç Õ ES?
PORQUE PROGRAMAÇÃO FUNCIONAL?
![Page 27: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/27.jpg)
27
![Page 28: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/28.jpg)
28
O Q U E FA Z U M C Ó D IG O S ER “ F U N C I O N A L ” ?
CARACTERÍSTICAS
![Page 29: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/29.jpg)
29
CARACTERÍSTICAS
![Page 30: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/30.jpg)
30
A U SÊ N C IA D E N U L L PO IN T ER S
EM N O SSO S S IST EM A S SÓ V EM O S N PS Q U A N D O I N T E R FA C EA M O S
C O M JAVA
CARACTERÍSTICAS
![Page 31: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/31.jpg)
31
IM U TA B IL I D A D E
M U TA B I L ID A D E É O T IM IZ A Ç Ã O
CARACTERÍSTICAS
![Page 32: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/32.jpg)
32
CARACTERÍSTICAS
![Page 33: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/33.jpg)
33
S Ó EXE C U T E C Á L C U L O S Q U A N D O R EA L M EN T E F O R
N E C ESS Á R IO
L I STA S IN F IN ITA S
CARACTERÍSTICAS
![Page 34: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/34.jpg)
34
T R IV IA IS , PO IS A ME SM A EN T R A D A S EM PR E G ER A A
ME SM A SA Í D A
TESTES
![Page 35: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/35.jpg)
35
EXEMPLO: TESTES
![Page 36: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/36.jpg)
36
EXEMPLO: TESTES
![Page 37: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/37.jpg)
37
BONUS: TESTES DE PROPRIEDADE
![Page 38: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/38.jpg)
38
N E M T U D O S Ã O F L O R E S. . .
ABSTRAÇÕES
![Page 39: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/39.jpg)
39
" [ IT ] WA S N O T U S IN G T H E R I G H T C O N T IN U AT IO N F O R
A P PL I C AT IVE S I N T H E G E N ER I C IN T ER PR ET ER "
ABSTRAÇÕES
![Page 40: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/40.jpg)
40
ABSTRAÇÕES
![Page 41: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/41.jpg)
41
MU ITA S A B ST R A Ç Õ ES
M U ITA S C O MB IN A Ç Õ ES E N T R E E SSA S A B ST R A Ç ÕE S
ABSTRAÇÕES
![Page 42: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/42.jpg)
42
D IM IN U IR R EPET IÇ Ã O D E C Ó D IG O
C Ó D I G O M A IS EF IC IE N T E
SEMPRE NOVAS ABSTRAÇÕES
![Page 43: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/43.jpg)
43
C O MP L EX O PA R A IN IC I A N T E S
I .E . C U RVA D E A P R EN D IZ A G EM A LTA
ABSTRAÇÕES
![Page 44: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/44.jpg)
44
VA M O S VER A L G U M A S A B ST R A Ç Õ ES E E ST R U T U R A S D E D A D O S
ABSTRAÇÕES
![Page 45: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/45.jpg)
45
N EM T U D O É S U PO R TA D O D IR ETA M EN T E P EL A L IN G U A G E M
S C A L A
NOTA
![Page 46: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/46.jpg)
46
SC A L A Z
NOTA
![Page 47: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/47.jpg)
47
EVITANDO NPS: OPTION
![Page 48: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/48.jpg)
48
E EV I TA N D O EXC EPT I O N S
ENCAPSULANDO ERROR: EITHER
![Page 49: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/49.jpg)
49
E EV I TA N D O EXC EPT I O N S
ENCAPSULANDO ERROR: EITHER
![Page 50: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/50.jpg)
50
F U N C TO R SMO N O ID SA PPL IC AT IVESMO N A D SC O YO N ED A SK L E ISL ISEM IG R O U PF O L D A B L E
GENERALIZANDO
![Page 51: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/51.jpg)
51
VA M O S VER A PEN A S A L G U N S
GENERALIZANDO
![Page 52: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/52.jpg)
52
O B J ETOS Q U E PO D EM SE R N AT U R A L M EN T E U N ID O S
D ES C R EV EM O S C O M O ESS A U N I Ã O É F E I TA
MONOIDS
![Page 53: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/53.jpg)
53
R ES U LTA D O D E U M A C H A M A D A A U M W EB SERVIC E:
EXEMPLO: MONOID
![Page 54: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/54.jpg)
54
SO M A N D O C O M | + | :
EXEMPLO: MONOID
![Page 55: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/55.jpg)
55
A C U M U L A N D O C O M C O M B IN EA L L :
EXEMPLO: MONOID
![Page 56: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/56.jpg)
56
EXEMPLO: DEFINIÇÃO DO MONOID
![Page 57: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/57.jpg)
57
C O M PO SI Ç Ã O L EG Í VELF O R C O M PR E H EN SIO N SC O N T ÊIN E R S, M A P, F L AT M A P
MONADS
![Page 58: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/58.jpg)
58
SE Q U ÊN C IA D E T R A N SF O R MA Ç Õ ES D E
EL EM EN TO S D EN T R O D E C O N T ÊIN E R S
MONADS
![Page 59: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/59.jpg)
59
MAP EM MONADS
a: A
Monad[A]
b: B
Monad[B]map(f: A => B)
![Page 60: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/60.jpg)
60
MAP EM MONADS
a: A
List[A]
b: B
List[B]map(f: A => B)
![Page 61: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/61.jpg)
61
LIST MONAD
![Page 62: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/62.jpg)
62
LIST MONAD
a: String
List[String]
b: MerchantId
List[MerchantId]
map(f: String => MerchantId)
![Page 63: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/63.jpg)
63
E U M A L ISTA VA Z IA C O N T IN U A S EN D O U M A
L I STA VA Z IA
LIST MONAD
![Page 64: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/64.jpg)
64
EITHER MONAD
a: A
Either[E, A]
b: B
Either[E, B]map(f: A => B)
![Page 65: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/65.jpg)
65
“ R I G H T- B IA SED ”
* A PA R T I R D O S C A L A 2 . 1 2
EITHER MONAD
![Page 66: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/66.jpg)
66
EITHER MONAD
![Page 67: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/67.jpg)
67
E U M “ L EF T ” C O N T IN U A SEN D O U M “ L EF T ”
EITHER MONAD
![Page 68: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/68.jpg)
68
FLATMAP
a: A
Monad[A]
b: B
Monad[B]flatMap(f: A => Monad[B])
![Page 69: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/69.jpg)
69
OPTION MONAD
a: A
Option[A]
b: B
Option[B]map(f: A => B)
![Page 70: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/70.jpg)
70
EXEMPLO: OPTION MONAD
![Page 71: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/71.jpg)
71
EXEMPLO: OPTION MONAD – COM FOR
![Page 72: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/72.jpg)
72
E U M “ N O N E” C O N T I N U A SE N D O U M “ N O N E ”
OPTION MONAD
![Page 73: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/73.jpg)
73
PROGRAMAÇÃO FUNCIONAL AVANÇADA
![Page 74: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/74.jpg)
74
SEPA R A N D O A D E F IN IÇ Ã O D A EXE C U Ç Ã O D E PR O G R A M A S
PROGRAMAÇÃO FUNCIONAL AVANÇADA
![Page 75: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/75.jpg)
75
A Ç Õ ES EXE C U TA D A S E XPL I C ITA M EN T E“ . R U N ”
A N T ES D ISS O , A PEN A S D EC L A R A MO S O Q U E VA I S ER EX EC U TA D O
COMPONDO UM PROGRAMA
![Page 76: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/76.jpg)
76
S EPA R A N D O A D EF IN I Ç Ã O D A IN T ER PR ETA Ç Ã O
COMPONDO UM PROGRAMA
![Page 77: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/77.jpg)
77
PR E C IS A M O S D E U M A B I B L I O T EC A PA R A IS SO
VA M O S U SA R A “ EF F M O N A D ”
EFF
![Page 78: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/78.jpg)
78
C O PY & PA ST E TO O L S, O B JE C T S , & C H A R T S F R O M
T H E F O L L O W IN G S L ID E S
COMPONDO O PROGRAMA
![Page 79: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/79.jpg)
79
EXECUTANDO O PROGRAMA
OU QUASE...
![Page 80: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/80.jpg)
80
U M P R O G R A MA É F Á C IL D E SE C O M PO R Q U A N D O
U SA M O S A PE N A S U M T I PO D E M O N A D
PA R A M Ú LT I PL O S T I PO S, M O N A D T R A N S F O R M ER S
MONADS NÃO SE MISTURAM
![Page 81: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/81.jpg)
81
O B J ETO S Q U E SA B EM T R A N SF O R MA R U MA M O N A D
EM O U T R A
VER B O SO PA R A U SO C O M MA IS D O Q U E D U A S M O N A D S
MONAD TRANSFORMERS
![Page 82: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/82.jpg)
82
EM S C A L A , E F F M O N A D
IN S PIR A D O EM U M A B IB L IO T EC A H A SK EL L
SISTEMA DE EFEITOS
![Page 83: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/83.jpg)
83
EFF MONAD
![Page 84: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/84.jpg)
84
PROGRAM EM EFF
![Page 85: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/85.jpg)
85
EXECUTANDO O PROGRAMA
![Page 86: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/86.jpg)
86
E XC ES SO D E R E C U R SIV I D A D E
S EM C U I D A D O , P O D E- S E E STO U R A R A P IL H A ( S TA C K O VER F L O W )
@ TA IL R EC A J U D A A E V ITA R IS SO
PROBLEMAS COMUNS
![Page 87: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/87.jpg)
87
D E B U G G I N G PO D E SE R M A I S D I F Í C IL
MU ITO S P U L O S EN T R E PEQ U E N A S F U N Ç Õ ES
SEPA R A Ç Ã O EN T R E D EF I N IÇ Ã O E EXE C U Ç Ã O D E PR O G R A M A S
PROBLEMAS COMUNS
![Page 88: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/88.jpg)
88
E Q U IL IB R A R P R O D U T IV I D A D E E
C O M PL E XID A D E
DESAFIO
![Page 89: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/89.jpg)
89
Q U A N TO É A B ST R A IR D EM A I S?
D E PEN D E D A EXPE R IÊ N C IA D A EQ U IPE!
DESAFIO
![Page 90: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/90.jpg)
90
PO D ER O SOA C U M U L A A B ST R A Ç Õ ES
( TA LV E Z D E M A I S )
VA L E EN T EN D Ê- L A S
B A L E N C E A R P R O D U T IV I D A D E / C O M PL E XID A D E
CONCLUSÕES SOBRE CÓDIGO FUNCIONAL
![Page 91: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/91.jpg)
91
H T T PS : / /W W W.H A SK EL L .O R G /
REFERÊNCIAS
![Page 92: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/92.jpg)
92
REFERÊNCIAS
![Page 93: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/93.jpg)
93
TEXTO
![Page 94: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/94.jpg)
94
EF F M O N A D
H T T PS: / /AT N O S- O R G .G IT H U B . IO /EF F /
REFERÊNCIAS
![Page 95: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/95.jpg)
95
C O PY & PA ST E TO O L S, O B JE C T S , & C H A R T S F R O M
T H E F O L L O W IN G S L ID E S
TEXTO
![Page 96: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/96.jpg)
96
H T T PS : / / J O B S .Z A L A N D O .C O M /
ESTAMOS CONTRATANDO!
![Page 97: PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli semigroup foldable generalizando. 51 vamos ver apenas alguns generalizando. 52 objetos](https://reader034.fdocument.pub/reader034/viewer/2022042223/5ec98ddab7511a59e711a20a/html5/thumbnails/97.jpg)
This presentation and its contents are strictly confidential. It may not, in whole or in part, be reproduced, redistributed, published or passed on to any other person by the recipient.
The information in this presentation has not been independently verified. No representation or warranty, express or implied, is made as to the accuracy or completeness of the presentation and the information contained herein and no reliance should be placed on such information. No responsibility is accepted for any liability for any loss howsoever arising, directly or indirectly, from this presentation or its contents.
D I S C L A I M E R
97