PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM...functors monoids applicatives monads coyonedas kleisli...

97
PROGRAMAÇÃO PURAMENTE FUNCIONAL NA JVM ABSTRAÇÕES FUNDAMENTAIS PAULO “JCRANKY” SIQUEIRA [email protected] [email protected]

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

PROGRAMAÇÃO

PURAMENTE

FUNCIONAL NA

JVM

ABSTRAÇÕES FUNDAMENTAIS

PAULO “JCRANKY” SIQUEIRA

[email protected]

[email protected]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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