View
6
Download
0
Category
Preview:
Citation preview
PROGRAMAÇÃO
PURAMENTE
FUNCIONAL NA
JVM
ABSTRAÇÕES FUNDAMENTAIS
PAULO “JCRANKY” SIQUEIRA
PAULO.SIQUEIRA@ZALANDO.DE
PAULO.SIQUEIRA@GMAIL.COM
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
3
T Ó P I C O S
Background
Programação Funcional
Abstrações
Programação Funcional Avançada
Conclusões
4
5
MICRO-SERVIÇOS
6
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
8
JAVA
9
E MB O R A T EN H A L A M B D A S
JAVA
10
SCALA
11
N Ã O É P U R A ME N T E F U N C IO N A L
SCALA
12
C Ó D I G O B A S EA D O EM F U N Ç Õ ES
PROGRAMAÇÃO FUNCIONAL
13
PROGRAMAÇÃO FUNCIONAL
INPUT FUNÇÃO OUTPUT
14
15
C O D E
HEALTH ENDPOINT
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
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
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
19
EXEMPLO: LISTA DE MERCADORES
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
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
22
SIDE-EFFECTS
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
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?
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?
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?
27
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
29
CARACTERÍSTICAS
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
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
32
CARACTERÍSTICAS
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
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
35
EXEMPLO: TESTES
36
EXEMPLO: TESTES
37
BONUS: TESTES DE PROPRIEDADE
38
N E M T U D O S Ã O F L O R E S. . .
ABSTRAÇÕES
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
40
ABSTRAÇÕES
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
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
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
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
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
46
SC A L A Z
NOTA
47
EVITANDO NPS: OPTION
48
E EV I TA N D O EXC EPT I O N S
ENCAPSULANDO ERROR: EITHER
49
E EV I TA N D O EXC EPT I O N S
ENCAPSULANDO ERROR: EITHER
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
51
VA M O S VER A PEN A S A L G U N S
GENERALIZANDO
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
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
54
SO M A N D O C O M | + | :
EXEMPLO: MONOID
55
A C U M U L A N D O C O M C O M B IN EA L L :
EXEMPLO: MONOID
56
EXEMPLO: DEFINIÇÃO DO MONOID
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
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
59
MAP EM MONADS
a: A
Monad[A]
b: B
Monad[B]map(f: A => B)
60
MAP EM MONADS
a: A
List[A]
b: B
List[B]map(f: A => B)
61
LIST MONAD
62
LIST MONAD
a: String
List[String]
b: MerchantId
List[MerchantId]
map(f: String => MerchantId)
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
64
EITHER MONAD
a: A
Either[E, A]
b: B
Either[E, B]map(f: A => B)
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
66
EITHER MONAD
67
E U M “ L EF T ” C O N T IN U A SEN D O U M “ L EF T ”
EITHER MONAD
68
FLATMAP
a: A
Monad[A]
b: B
Monad[B]flatMap(f: A => Monad[B])
69
OPTION MONAD
a: A
Option[A]
b: B
Option[B]map(f: A => B)
70
EXEMPLO: OPTION MONAD
71
EXEMPLO: OPTION MONAD – COM FOR
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
73
PROGRAMAÇÃO FUNCIONAL AVANÇADA
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
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
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
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
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
79
EXECUTANDO O PROGRAMA
OU QUASE...
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
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
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
83
EFF MONAD
84
PROGRAM EM EFF
85
EXECUTANDO O PROGRAMA
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
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
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
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
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
91
H T T PS : / /W W W.H A SK EL L .O R G /
REFERÊNCIAS
92
REFERÊNCIAS
93
TEXTO
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
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
96
H T T PS : / / J O B S .Z A L A N D O .C O M /
ESTAMOS CONTRATANDO!
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
Recommended