33
Scala {Monad}

Developers Summit 2015 - Scala Monad

Embed Size (px)

Citation preview

Page 1: Developers Summit 2015 - Scala Monad

Scala {Monad}

Page 2: Developers Summit 2015 - Scala Monad

Who Am I• Now: Dynalyst • Lang: Korean(30+ years) Japanese(8+ years) JAVA(8.2+ years) Scala(a year)

• AdTech: AMoAd DSP CAA Reward

Page 3: Developers Summit 2015 - Scala Monad

What Dynalyst• Dynamic Retargeting + Analyst

•ユーザーの趣味嗜好に適した広告配信を行う国内初のスマートフォンに特化したダイナミックリターゲティング広告

Page 4: Developers Summit 2015 - Scala Monad

Scala USAGE

Page 5: Developers Summit 2015 - Scala Monad

Today’s Talk

•Monads in Scala Standard Library

•How to use them

Page 6: Developers Summit 2015 - Scala Monad

Monad?

•Effects on a value •Structure that represents computations defined as sequences of steps

Page 7: Developers Summit 2015 - Scala Monad

Monad?

•Effects on a value:unit

•Structure that represents computations defined as sequences of steps:flatMap

Page 8: Developers Summit 2015 - Scala Monad

Effects on a value• VALUE • MONAD(VALUE) • Option(VALUE),List(VALUE),Try(VALUE),Future(VALUE)

Page 9: Developers Summit 2015 - Scala Monad

Sequencial Computations

• X -> Y -> Z • M[X] -> M[Y] -> M[Z]

f g

f’ g’

Page 10: Developers Summit 2015 - Scala Monad

Behaviour• f = X => M[Y]g = Y => M[Z]

• X -> M[X] -> M[Y]

• M[Y] -> M[Z] -> …

unit flatMap

flatMap flatMap

Page 11: Developers Summit 2015 - Scala Monad

Simple User DAO

Page 12: Developers Summit 2015 - Scala Monad

Option

Effects on a

Nullable Value

(Some or None)

Page 13: Developers Summit 2015 - Scala Monad

Unit

Page 14: Developers Summit 2015 - Scala Monad

FlatMap

Page 15: Developers Summit 2015 - Scala Monad

Effects on a Nullable Value

Some(User) or None

Page 16: Developers Summit 2015 - Scala Monad

Exception Safety?

Page 17: Developers Summit 2015 - Scala Monad

Try

Effects on a

Throwable Value

(Success or Failure)

Page 18: Developers Summit 2015 - Scala Monad

Unit

Page 19: Developers Summit 2015 - Scala Monad

FlatMap

Page 20: Developers Summit 2015 - Scala Monad

Effects on a Nullable & Throwable Value

Success(Some(User)) orSuccess(None) or

Failure(throwable)

Page 21: Developers Summit 2015 - Scala Monad

Blocking Thread?

Page 22: Developers Summit 2015 - Scala Monad

Future

Effects on a

Blocking Value

(Success or Failure)

Page 23: Developers Summit 2015 - Scala Monad

Unit

Page 24: Developers Summit 2015 - Scala Monad

FlatMap

Page 25: Developers Summit 2015 - Scala Monad

Effects on a Nullable & Throwable Valuein Asynchronously

Success(Some(User)) orSuccess(None) or

Failure(throwable)

Page 26: Developers Summit 2015 - Scala Monad

List

Effects on

Iterable Values

(List or Nil)

Page 27: Developers Summit 2015 - Scala Monad

Monad Laws

• Left Identity • Right Identity • Associativity

Page 28: Developers Summit 2015 - Scala Monad

Pull a value out of Monad

•Helper Functions:getOrElse,fold,foreach,recover…

•Pattern Match •3rd Party Library:Akka,Spray…

Page 29: Developers Summit 2015 - Scala Monad

Akka

Page 30: Developers Summit 2015 - Scala Monad

Spray

Page 31: Developers Summit 2015 - Scala Monad

Benefits

• Keep your codes CLEAN

• Easy To Guess(READABLE)

• MAINTAINABLE

• Less Code Less BUGS

Page 32: Developers Summit 2015 - Scala Monad

We are Hiring!• 一緒に働く仲間を募集しています!Scalaに興味のある方はぜひ!

[email protected]