Download - Functional Programming

Transcript
Page 1: Functional Programming

λFunctional Programming

Page 2: Functional Programming

Who am I?• Ryan Riley• Catapult Systems Houston• Blog: http://wizardsofsmart.net• GitHub: http://github.com/panesofglass• Twitter: @panesofglass

Page 3: Functional Programming

Agenda1. Functional Programming Concepts2. Func’y C#3. Resources

Page 4: Functional Programming

1. Functional Programming Concepts

Page 5: Functional Programming

Functional programmin

g is just a style.

Page 6: Functional Programming

Treat functions as

values.

Page 7: Functional Programming

What is a function?

A function, as in math.(In particular, as in lambda calculus.)

((Ask Jeff Odell.))

Page 8: Functional Programming

Follow the Arrows

• add x y has a type of int -> int -> int• In C#, this could be Func<int, int,

int>

• (Actually, that’s Func<int,<Func<int, int>>>. We’ll see why in a moment….)

Page 9: Functional Programming

Functions are values, too.

• .NET 1.0 => delegates• .NET 2.0 => anonymous delegates

+ generics• .NET 3.0 => lambdas• Higher-order functions accept a

function as a parameter.

Page 10: Functional Programming

ImmutabilityFunctions take an input and return a result

NO side effects!

NO state!

NO I/O!

Imag

e f

rom

One Y

ear

Bib

le B

log

Page 11: Functional Programming

Implications• Recursion• Persistent data structures

Page 12: Functional Programming

What?

How?

Paradigm-shift

Declarativevs.

Imperative

Page 13: Functional Programming

Advantages• Very easy to reason about• Concurrency friendly• Easy to compose:

doubleSq x = square(double(x))doubleSq = double . square

• Foundation of Domain Specific Languages

Page 14: Functional Programming

Disadvantages

• Too much recursion can overflow the stack (without tail-call optimization, or TCO)

• High memory consumption from creating so many objects …

Page 15: Functional Programming

However,

Page 16: Functional Programming

Referential transparency• Replace a function with its value• Efficiency with caching (a.k.a.

memoization)

• Easier for programmers to understand• ∴ Easier to reuse and test

Page 17: Functional Programming

So what?• Moore’s Law is failing.• Multiple CPUs / cores is the future.• Controlling mutable state in

concurrency is very hard …unless you have no mutable state!

Page 19: Functional Programming

2. Play that Func’y Music

C#

Page 20: Functional Programming

Func & Action

• Define your functions.• Generics are important.• Type-safety over many types.

Page 21: Functional Programming

Lists everywhere!• Functional languages like Lisp build

entirely on lists and maps (i.e. Dictionaries).

• Feel like you’ve seen this before?

Page 22: Functional Programming

Als

o

by

Eri

k M

eijer

!

LINQ!• Implementation of common functional

programming functions over lists via IEnumerable.

• Select => map• Where => filter• Aggregate => fold / reduce• SelectMany => bind / fmap, or “map then

flatten”

Page 23: Functional Programming

This means you are probably already using

FP!

Page 24: Functional Programming

Take it further

• Functions as data• Closures => Capture external state

for later• Currying + Partial application =>

Reduce dependencies• Memoization => Run it again later

Page 25: Functional Programming

DemoCurrying and Partial application

Page 26: Functional Programming

Make it concurrent

• Task Parallel Library (PFx)• Reactive Extensions (Rx)• PLinq => Parallel LINQ

Page 27: Functional Programming

DemoConcurrency

Page 28: Functional Programming

What didn’t we cover?

• Many more functional operators (LINQ)• Managing mutable state from the

environment• LINQ to Observables, Continuations, etc.• The “M” word

Page 29: Functional Programming

3. Resources

Page 32: Functional Programming

Videos• Functional Programming Fundament

als

(Channel 9 Lecture Series)