programaÇÃo puramente funcional na jvm...functors monoids applicatives monads coyonedas kleisli...

Post on 22-May-2020

6 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

top related