Railway Oriented Programming - Java funktional und ohne Exceptions

124
Java funktional und ohne Exceptions Railway Oriented Programming

Transcript of Railway Oriented Programming - Java funktional und ohne Exceptions

Page 1: Railway Oriented Programming - Java funktional und ohne Exceptions

Java funktional und ohne ExceptionsRailway Oriented Programming

Page 2: Railway Oriented Programming - Java funktional und ohne Exceptions

„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/

Page 3: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 4: Railway Oriented Programming - Java funktional und ohne Exceptions

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

Page 5: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 6: Railway Oriented Programming - Java funktional und ohne Exceptions

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

Page 7: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 8: Railway Oriented Programming - Java funktional und ohne Exceptions

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

Page 9: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 10: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 11: Railway Oriented Programming - Java funktional und ohne Exceptions

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

Page 12: Railway Oriented Programming - Java funktional und ohne Exceptions

„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

Page 13: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 14: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 15: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 16: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 17: Railway Oriented Programming - Java funktional und ohne Exceptions

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

Page 18: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 19: Railway Oriented Programming - Java funktional und ohne Exceptions

Stefan Macke

Page 20: Railway Oriented Programming - Java funktional und ohne Exceptions

Stefan Mackehttp://soa.rocks

Page 21: Railway Oriented Programming - Java funktional und ohne Exceptions

Stefan Mackehttp://soa.rocks@StefanMacke

Page 22: Railway Oriented Programming - Java funktional und ohne Exceptions

Stefan Mackehttp://soa.rocks

anwendungsentwicklerpodcast.de

@StefanMacke

Page 23: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 24: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 25: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 26: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 27: Railway Oriented Programming - Java funktional und ohne Exceptions

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

Page 28: Railway Oriented Programming - Java funktional und ohne Exceptions

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

Page 29: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 30: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 31: Railway Oriented Programming - Java funktional und ohne Exceptions

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

Page 32: Railway Oriented Programming - Java funktional und ohne Exceptions

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

Page 33: Railway Oriented Programming - Java funktional und ohne Exceptions

Railway Oriented Programming

Page 34: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 35: Railway Oriented Programming - Java funktional und ohne Exceptions

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

Page 36: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 37: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 38: Railway Oriented Programming - Java funktional und ohne Exceptions

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

Page 39: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 40: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 41: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 42: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 43: Railway Oriented Programming - Java funktional und ohne Exceptions

Success Failure

Page 44: Railway Oriented Programming - Java funktional und ohne Exceptions

Success Failure

onSuccess(fun) fun() -

Page 45: Railway Oriented Programming - Java funktional und ohne Exceptions

Success Failure

onSuccess(fun)

onFailure(fun)

fun()

- fun()

-

Page 46: Railway Oriented Programming - Java funktional und ohne Exceptions

Success Failure

onSuccess(fun)

onFailure(fun)

onBoth(fun)

fun()

-

fun()

fun()

-

fun()

Page 47: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 48: Railway Oriented Programming - Java funktional und ohne Exceptions

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

Page 49: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 50: Railway Oriented Programming - Java funktional und ohne Exceptions

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

Page 51: Railway Oriented Programming - Java funktional und ohne Exceptions

onSuccess()

Page 52: Railway Oriented Programming - Java funktional und ohne Exceptions

onSuccess()

Page 53: Railway Oriented Programming - Java funktional und ohne Exceptions

onSuccess()

Page 54: Railway Oriented Programming - Java funktional und ohne Exceptions

ensure()

Page 55: Railway Oriented Programming - Java funktional und ohne Exceptions

ensure()

Page 56: Railway Oriented Programming - Java funktional und ohne Exceptions

ensure()

true

Page 57: Railway Oriented Programming - Java funktional und ohne Exceptions

ensure()

true

false

Page 58: Railway Oriented Programming - Java funktional und ohne Exceptions

map()

Page 59: Railway Oriented Programming - Java funktional und ohne Exceptions

map()

Page 60: Railway Oriented Programming - Java funktional und ohne Exceptions

map()

Page 61: Railway Oriented Programming - Java funktional und ohne Exceptions

map()ok

Page 62: Railway Oriented Programming - Java funktional und ohne Exceptions

map()ok

Fehler

Page 63: Railway Oriented Programming - Java funktional und ohne Exceptions

(alle)

Page 64: Railway Oriented Programming - Java funktional und ohne Exceptions

(alle)

Page 65: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 66: Railway Oriented Programming - Java funktional und ohne Exceptions

ensure(…)

Success Failure

map(…)

map(…)

Page 67: Railway Oriented Programming - Java funktional und ohne Exceptions

Quelle: https://vimeo.com/113707214

Page 68: Railway Oriented Programming - Java funktional und ohne Exceptions

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

Page 69: Railway Oriented Programming - Java funktional und ohne Exceptions

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

Page 70: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 71: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 72: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 73: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 74: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 75: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 76: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 77: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 78: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 79: Railway Oriented Programming - Java funktional und ohne Exceptions

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

Page 80: Railway Oriented Programming - Java funktional und ohne Exceptions

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

Page 81: Railway Oriented Programming - Java funktional und ohne Exceptions

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

Page 82: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 83: Railway Oriented Programming - Java funktional und ohne Exceptions

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

Monaden

Page 84: Railway Oriented Programming - Java funktional und ohne Exceptions

Monade

repräsentiert

verhindert/erleichtert

Page 85: Railway Oriented Programming - Java funktional und ohne Exceptions

OptionalWert vorhanden?

null-Checks

Page 86: Railway Oriented Programming - Java funktional und ohne Exceptions

OptionalWert vorhanden?

null-Checks

Streammehrere Werte

eigene Iteration

Page 87: Railway Oriented Programming - Java funktional und ohne Exceptions

OptionalWert vorhanden?

null-Checks

Streammehrere Werte

eigene Iteration

Promiseasynchrones Ergebnis

eigene Threads

Page 88: Railway Oriented Programming - Java funktional und ohne Exceptions

OptionalWert vorhanden?

null-Checks

Streammehrere Werte

eigene Iteration

Promiseasynchrones Ergebnis

eigene Threads

ResultErgebnis einer Aktion

Exception Handling

Page 89: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 90: Railway Oriented Programming - Java funktional und ohne Exceptions

1) Typkonstruktor

Page 91: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 92: Railway Oriented Programming - Java funktional und ohne Exceptions

2) return() oder unit()

Page 93: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 94: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 95: Railway Oriented Programming - Java funktional und ohne Exceptions

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

Page 96: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 97: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 98: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 99: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 100: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 101: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 102: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 103: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 104: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 105: Railway Oriented Programming - Java funktional und ohne Exceptions

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

Page 106: Railway Oriented Programming - Java funktional und ohne Exceptions

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

Page 107: Railway Oriented Programming - Java funktional und ohne Exceptions

ROP in der Praxis

Page 108: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 109: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 110: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 111: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 112: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 113: Railway Oriented Programming - Java funktional und ohne Exceptions

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

Page 114: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 115: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 116: Railway Oriented Programming - Java funktional und ohne Exceptions

Fazit

Page 117: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 118: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 119: Railway Oriented Programming - Java funktional und ohne Exceptions

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

Page 120: Railway Oriented Programming - Java funktional und ohne Exceptions

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

Page 121: Railway Oriented Programming - Java funktional und ohne Exceptions

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

Page 122: Railway Oriented Programming - Java funktional und ohne Exceptions

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

Page 123: Railway Oriented Programming - Java funktional und ohne Exceptions
Page 124: Railway Oriented Programming - Java funktional und ohne Exceptions

http://soa.rocks

anwendungsentwicklerpodcast.de

@StefanMacke

Java funktional und ohne ExceptionsRailway Oriented Programming