Railway Oriented Programming - Java funktional und ohne Exceptions
-
Upload
stefan-macke -
Category
Software
-
view
125 -
download
0
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