Functional programming

28
FUNCTIONAL PROGRAMMING (FP) Prateek Jain ([email protected])

description

A small overview of functional programming.

Transcript of Functional programming

Page 1: Functional programming

FUNCTIONAL PROGRAMMING (FP)

Prateek Jain

([email protected])

Page 2: Functional programming

Is OOPs, oops?• NullPointer problems• Inheritance issues• “new” operator issues

Page 3: Functional programming

Is OOPs, oops?• NullPointer problems• Inheritance issues• “new” operator issues

Page 4: Functional programming

Is OOPs, oops?• NullPointer problems• Inheritance issues• “new” operator issues

Page 5: Functional programming

Why FP?• I Have to Be Good at Writing Concurrent Programs• Most Programs Are Just Data Management Problems

(why ORM?)• More Modular• I Have to Work Faster and Faster• Code is written once, but read many times

Page 6: Functional programming

Why FP?• I Have to Be Good at Writing Concurrent Programs• Most Programs Are Just Data Management Problems

(why ORM?)• More Modular• I Have to Work Faster and Faster• Code is written once, but read many times

Page 7: Functional programming

Why FP?• I Have to Be Good at Writing Concurrent Programs• Most Programs Are Just Data Management Problems

(why ORM?)• More Modular• I Have to Work Faster and Faster• Code is written once, but read many times

Page 8: Functional programming

Why FP?• I Have to Be Good at Writing Concurrent Programs• Most Programs Are Just Data Management Problems

(why ORM?)• More Modular• I Have to Work Faster and Faster• Code is written once, but read many times

Page 9: Functional programming

Why FP?• I Have to Be Good at Writing Concurrent Programs• Most Programs Are Just Data Management Problems

(why ORM?)• More Modular• I Have to Work Faster and Faster• Code is written once, but read many times

Page 10: Functional programming

What is FP?• RECURSION• ABSTRACTION• HIGHER ORDER FUNCTIONS

• IMPACT MOST PROGRAMMING LANGUAGES

Page 11: Functional programming

PROGRAMS AS FUNCTIONS• PROGRAM = DESCRIPTION OF A SPECIFIC

COMPUTATION• Y = F(X)• F: X ->Y

• MATHEMATICS• VARIABLES = ACTUAL VALUES• NO MEMEORY ALLOCATION CONCEPT

• IMPERATIVE LANGUAGE• VARIABLES = MEMORY LOCATIONS + VALUES

Page 12: Functional programming

PROGRAMS AS FUNCTIONS• NO LOOPS BUT RECURSION

• NO VARIABLE EXCEPT AS A NAME FOR A VALUE

• NO ASSIGNMENT OPERATION (x = x+1 , MEANINGLESS)

• ONLY CONSTANTS, PARAMETERS AND VALUES

Page 13: Functional programming

EXAMPLE

Void GCD (int u, int v, int* x) {

Int y, t, z;

z = u;

y = v;

While (y!=0) {

}

}

Void GCD(int u, int v) {

if(v==0)

return u;

else

return GCD(v, u%v);

}

imperative functional

Page 14: Functional programming

NO VARIABLES, NO ASSIGNMENT

• No notion of the internal state of a function.• Referential Transparency.• Value Semantics.

Page 15: Functional programming

FP vs Others• Recursions instead of loops• Pattern matching instead of “if”• Pattern matching instead of state machines• Information transformation instead of sequence of tasks

Page 16: Functional programming

FP vs Others• Persistent data structures• Powerful concurrency constructs : Actors• Software transactional memory• Avoid “Null”

Page 17: Functional programming

What it really means?• Immutability is good

Page 18: Functional programming

What it really means?• Immutability is good• No bugs (due to nasty side effects)

Page 19: Functional programming

What it really means?• Immutability is good• No bugs (due to nasty side effects)• Benefits from concurrency

Page 20: Functional programming

What it really means?• Immutability is good• No bugs (due to nasty side effects)• Benefits from concurrency• No more messy loops

Page 21: Functional programming

What it really means?• Immutability is good• No bugs (due to nasty side effects)• Benefits from concurrency• No more messy loops• Lazy evaluation

Page 22: Functional programming

FP Examples• Erlang, Haskell, Clojure• F#• JAVA 8 (prject lambda), Scala, Groovy• R, Mathematica etc. (specialized languages)

Page 23: Functional programming

CAUTION CAUTION

Page 24: Functional programming

Maintaining, Maintainability• Use functional style where\till it makes the intent more

readable.

Sort(extract(filter(having(on(Pet.class).getSpecies(), is(Dog)), pets, on(Pet.class).getName()), on(String.class));

List<Pet> dogs = filter(having(on(Pet.class).getSpecies(), is(Dog)), pets);List<String> dogNames = extract(dogs, on(Pet.class).getName());List<String> sortedDogNames = sort(dogNames, on(String.class));

Page 25: Functional programming

Maintaining, Maintainability• One liners are always not better.

Private Converter<Pet, VetStay> toVetStay () {@override public VetStay converter(Pet pet) {

return new VetStay(pet, new Date(), “….”);}});

Convert(pets, new Convert<Pet, VetStay>() {@override public VetStay converter(Pet pet) {

return new VetStay(pet, new Date(), “….”);}});

Convert(pets, toVetStay());

Page 26: Functional programming

FP - Adoption• Facebook (tchat), Linkedin uses Erlang• Twitter, UBS, Credit Suisse uses Scala

Page 27: Functional programming

QUESTIONS?Questions?

Page 28: Functional programming

FEEDBACKFeedback