Railway Oriented Programming - Java funktional und ohne Exceptions

Post on 15-Apr-2017

122 views 0 download

Transcript of Railway Oriented Programming - Java funktional und ohne Exceptions

Java funktional und ohne ExceptionsRailway Oriented Programming

„Exceptions sind schlimmer als GOTOs.

JOELSPOLSKYCEO Stack Exchange Network

Betsy Weber - Joel Spolsky - flickr.com/photos/betsyweber/8044869747 CC Attribution 2.0 Generic - creativecommons.org/licenses/by/2.0/

Quelle: https://www.joelonsoftware.com/2003/10/13/13/

knowyourmeme.com/photos/503645-they-still-do-not-realize

Tomwang112 - Copyright 2011 - www.istockphoto.com/fotos/113592506

Alexas_Fotos - CC0 Public Domain - pixabay.com/de/sprung-new-york-gefährlich-verrückt-2040426/

Clicknique - Copyright 2012 - www.istockphoto.com/fotos/12123981

„Die null-Referenz: Mein Milliarden- Dollar-Fehler.

TONYHOAREInformatik-Pionier

Rama - Sir Charles Antony Richard Hoare giving a talk at the EPFL on 20th of June 2011commons.wikimedia.org/wiki/File:Sir_Tony_Hoare_IMG_5125.jpg - CC BY-SA 2.0 FR - creativecommons.org/licenses/by-sa/2.0/fr/

Quelle: https://www.infoq.com/presentations/ Null-References-The-Billion-Dollar-Mistake-Tony-Hoare

sdominick - Copyright 2013 - www.istockphoto.com/fotos/3354516

Stefan Macke

Stefan Mackehttp://soa.rocks

Stefan Mackehttp://soa.rocks@StefanMacke

Stefan Mackehttp://soa.rocks

anwendungsentwicklerpodcast.de

@StefanMacke

Unsplash - CC0 Public Domain - pixabay.com/de/schweine-ferkel-essen-fütterung-691762/

Myriams-Fotos - CC0 Public Domain - pixabay.com/de/güllefaß-gülle-jauche-verteilen-1302596/

obpia30 - CC0 Public Domain - pixabay.com/de/katze-box-predator-650770/

obpia30 - CC0 Public Domain - pixabay.com/de/katze-box-predator-650770/

Railway Oriented Programming

quimono - CC0 Public Domain - pixabay.com/de/wasser-tröpfchen-tropfen-spritzen-1281247/

Katie Tegtmeyer - Crossed fingers I - flickr.com/photos/katietegtmeyer/124315323CC Attribution 2.0 Generic - creativecommons.org/licenses/by/2.0/

Success Failure

Success Failure

onSuccess(fun) fun() -

Success Failure

onSuccess(fun)

onFailure(fun)

fun()

- fun()

-

Success Failure

onSuccess(fun)

onFailure(fun)

onBoth(fun)

fun()

-

fun()

fun()

-

fun()

eak_kkk - CC0 Public Domain - pixabay.com/de/wasserfall-wasser-spritzen-platsch-1049079/

Arcaion - CC0 Public Domain - pixabay.com/de/die-pille-kapsel-medizin-1772275/

onSuccess()

onSuccess()

onSuccess()

ensure()

ensure()

ensure()

true

ensure()

true

false

map()

map()

map()

map()ok

map()ok

Fehler

(alle)

(alle)

ensure(…)

Success Failure

map(…)

map(…)

Quelle: https://vimeo.com/113707214

Quelle: https://www.pluralsight.com/courses/csharp-applying-functional-principles

Quelle: https://github.com/StefanMacke/ao-railway

pvdv63 - CC0 Public Domain - pixabay.com/de/notbremse-gefahr-zug-blockiert-1053741/

PublicDomainPictures - CC0 Public Domain - pixabay.com/de/domino-dominosteine-spiel-spielen-21176/

Thomas Backa - WTF mug - CC0 Public Domain - flickr.com/photos/backa/4180780815/

obpia30 - CC0 Public Domain - pixabay.com/de/katze-box-predator-650770/

Monaden

Monade

repräsentiert

verhindert/erleichtert

OptionalWert vorhanden?

null-Checks

OptionalWert vorhanden?

null-Checks

Streammehrere Werte

eigene Iteration

OptionalWert vorhanden?

null-Checks

Streammehrere Werte

eigene Iteration

Promiseasynchrones Ergebnis

eigene Threads

OptionalWert vorhanden?

null-Checks

Streammehrere Werte

eigene Iteration

Promiseasynchrones Ergebnis

eigene Threads

ResultErgebnis einer Aktion

Exception Handling

1) Typkonstruktor

2) return() oder unit()

3) bind(), >>= oder flatMap()

1) Identität von rechtsm >>= return = m

2) Identität von linksreturn x >>= f = f x

3) Assoziativität(m >>= f) >>= g = m >>= (\x . f x >>= g)

Quelle: http://www.inf.fu-berlin.de/lehre/SS09/PI02/docs/monaden.pdf

thepoodleanddogblog.typepad.com/the_poodle_and_dog_blog/2010/10/this-is-what-.html

ROP in der Praxis

WikiImages - CC0 Public Domain - pixabay.com/de/lochkartenlocher-datenverarbeitung-62897/

Fazit

Quelle: https://blogs.msdn.microsoft.com/dotnet/2016/07/25/a-peek-into-f-4-1/

Quelle: http://www.scala-lang.org/api/current/scala/util/Try.html

Quelle: http://www.javaslang.io/

https://imgflip.com/i/1m1kp2

http://soa.rocks

anwendungsentwicklerpodcast.de

@StefanMacke

Java funktional und ohne ExceptionsRailway Oriented Programming