Slide 1

Slide 1 text

FUN WITH TYPES Created by / Breno Ferreira @breno_ferreira

Slide 2

Slide 2 text

IS YOUR CODE EXPLICIT?

Slide 3

Slide 3 text

FOR EXAMPLE d e f d i v ( x : I n t , y : I n t ) = x / y

Slide 4

Slide 4 text

WHAT HAPPENS WHEN? d i v ( 2 , 0 )

Slide 5

Slide 5 text

java.lang.ArithmeticException: / by zero

Slide 6

Slide 6 text

HIDDEN SIDE-EFFECTS

Slide 7

Slide 7 text

WHAT ABOUT THIS ONE? ( ) = > T

Slide 8

Slide 8 text

A SIMPLE GETTER! IT CAN'T GO WRONG!

Slide 9

Slide 9 text

Getters are used in Objects. Objects cause Side-Effects!

Slide 10

Slide 10 text

FOR EXAMPLE: v a l s j o b s : ( ) = > S t r i n g s j o b s ( ) / / : " A p p l e I " s j o b s ( ) / / : " A p p l e I I " s j o b s ( ) / / : " M a c i n t o s h ! " s j o b s ( ) / / : " ✗"

Slide 11

Slide 11 text

SO: ( ) = > T r y [ T ]

Slide 12

Slide 12 text

FOR EXAMPLE: v a l s j o b s : ( ) = > S t r i n g s j o b s ( ) / / : " i P h o n e " s j o b s ( ) / / : " i P a d " s j o b s ( ) / / : " i C l o u d " s j o b s ( ) / / : " ✝"

Slide 13

Slide 13 text

MAKING EVERYTHING EXPLICIT: ( ) = > T r y [ O p t i o n [ T ] ]

Slide 14

Slide 14 text

WHAT ABOUT A GETTER OF GETTERS? ( ) = > ( ) = > T r y [ O p t i o n [ T ] ]

Slide 15

Slide 15 text

EXTRACT TO INTERFACE t r a i t I t e r a b l e [ T ] { g e t I t e r a t o r : I t e r a t o r [ T ] } t r a i t I t e r a t o r [ T ] { h a s N e x t : B o o l e a n n e x t : T }

Slide 16

Slide 16 text

WHAT IF IT'S ASYNC?

Slide 17

Slide 17 text

GETTER ( ) = > T r y [ T ]

Slide 18

Slide 18 text

ASYNC GETTER ( ( T r y [ T ] ) = > ( ) ) = > ( )

Slide 19

Slide 19 text

BASICALLY, A FUTURE t r a i t F u t u r e [ T ] { o n S u c c e s s : T = > ( ) o n F a i l u r e : E x c e p t i o n = > ( ) }

Slide 20

Slide 20 text

WHAT ABOUT MANY ASYNC VALUES?

Slide 21

Slide 21 text

EASY: ( ( T r y [ I t e r a b l e [ T ] ] ) = > ( ) ) = > ( )

Slide 22

Slide 22 text

BETTER: ( ( T r y [ O p t i o n [ T ] ] ) = > ( ) ) = > ( )

Slide 23

Slide 23 text

OBSERVABLE/OBSERVER t r a i t O b s e r v a b l e [ T ] { s u b s c r i b e ( o b s e r v e r : O b s e r v e r [ T ] ) } t r a i t O b s e r v e r [ T ] { o n N e x t ( v a l u e : T ) o n E r r o r ( e r r o r : E x c e p t i o n ) o n C o m p l e t e d ( ) }

Slide 24

Slide 24 text

FOUR BASIC EFFECTS IN COMPUTING: One Many Sync T / Option[T] Iterable[T] Async Future[T] Observable[T]

Slide 25

Slide 25 text

Demo Code

Slide 26

Slide 26 text

Q&A

Slide 27

Slide 27 text

THANK YOU! http://brenoferreira.github.io/TDC14-JS @breno_ferreira