26
Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay

Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration

Introduction to Railway Oriented Programming

Ed Courtenay@edcourtenay

Page 2: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration

Ed Courtenay

Senior Engineer, Application Reliability Team

Page 3: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration
Page 4: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration
Page 5: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration

Inspiration for this

talk

• Scott Wlaschin

• F# for Fun and Profit -https://fsharpforfunandprofit.com/rop

Page 6: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration

Agenda

• So what are we talking about?

• F# demos

• How can these principles be applied to non-functional languages?

• C# demo

Page 7: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration

Always code as if the person who ends up maintaining your code is a violent psychopath who knows where you live.

http://wiki.c2.com/?CodeForTheMaintainer

Page 8: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration

What is Railway Oriented Programming?• A functional approach to error handling

• A technique for creating pipelines

• Push error handling to where it belongs

• Control flow over exceptions

Page 9: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration
Page 10: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration
Page 11: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration

Func<Doctor, Doctor>

Regenerate

Page 12: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration
Page 13: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration

F# Demo

Page 14: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration

'TInput Happy Path

'TOutput

Single Track Function

Page 15: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration

'TA 'TB 'TC 'TD

Page 16: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration

'TInput Happy Path

Sad Path

Result<'TSuccess, 'TFailure>

Switch Function

Page 17: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration
Page 18: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration

('a -> Result<'b, 'c>) -> Result<'a, 'b> -> Result<'b, 'c>

switchFunction twoTrackInput output

Page 19: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration

MapR

esu

lt<T

A, T

C>

Resu

lt<TA, TC

>

Success path

Failure path

TA TB

TC TC

Page 20: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration

MapR

esu

lt<l

on

g, s

trin

g>R

esult<

DateTim

e, strin

g>

Success path

Failure path

long DateTime

string string

Page 21: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration

Bind

Success path

Failure path

TA TB

TC TC

Page 22: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration
Page 23: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration

C# Demo

Page 24: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration

Code for this talk

• https://github.com/ecourtenay/ROP

Page 25: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration
Page 26: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration

Any Questions?