![Page 1: Why you should care about functional programming](https://reader034.vdocument.in/reader034/viewer/2022051817/54881a60b47959e70c8b5650/html5/thumbnails/1.jpg)
Why you should care about Functional Programming
Dhananjay Nene
TechWeekend 5December 18th, 2010
![Page 2: Why you should care about functional programming](https://reader034.vdocument.in/reader034/viewer/2022051817/54881a60b47959e70c8b5650/html5/thumbnails/2.jpg)
What is functional programming about ?
![Page 3: Why you should care about functional programming](https://reader034.vdocument.in/reader034/viewer/2022051817/54881a60b47959e70c8b5650/html5/thumbnails/3.jpg)
Functions = input + transformation + output
![Page 4: Why you should care about functional programming](https://reader034.vdocument.in/reader034/viewer/2022051817/54881a60b47959e70c8b5650/html5/thumbnails/4.jpg)
def add(x,y) : return x + y
def double(x) : return 2 * x
![Page 5: Why you should care about functional programming](https://reader034.vdocument.in/reader034/viewer/2022051817/54881a60b47959e70c8b5650/html5/thumbnails/5.jpg)
NO side effects
![Page 6: Why you should care about functional programming](https://reader034.vdocument.in/reader034/viewer/2022051817/54881a60b47959e70c8b5650/html5/thumbnails/6.jpg)
Unit Testing or Integration Testingwhen NO side effects ?
![Page 7: Why you should care about functional programming](https://reader034.vdocument.in/reader034/viewer/2022051817/54881a60b47959e70c8b5650/html5/thumbnails/7.jpg)
Benefit 1 : Testability
![Page 8: Why you should care about functional programming](https://reader034.vdocument.in/reader034/viewer/2022051817/54881a60b47959e70c8b5650/html5/thumbnails/8.jpg)
Benefit 2 : Easier Integration
![Page 9: Why you should care about functional programming](https://reader034.vdocument.in/reader034/viewer/2022051817/54881a60b47959e70c8b5650/html5/thumbnails/9.jpg)
All variables are final and are an alias to the result of a computation
![Page 10: Why you should care about functional programming](https://reader034.vdocument.in/reader034/viewer/2022051817/54881a60b47959e70c8b5650/html5/thumbnails/10.jpg)
A variable thus cannot have a different value at different points in time
![Page 11: Why you should care about functional programming](https://reader034.vdocument.in/reader034/viewer/2022051817/54881a60b47959e70c8b5650/html5/thumbnails/11.jpg)
Benefit 3 : Concurrency (no locking)
![Page 12: Why you should care about functional programming](https://reader034.vdocument.in/reader034/viewer/2022051817/54881a60b47959e70c8b5650/html5/thumbnails/12.jpg)
Constructs to easily parallelise operations
![Page 13: Why you should care about functional programming](https://reader034.vdocument.in/reader034/viewer/2022051817/54881a60b47959e70c8b5650/html5/thumbnails/13.jpg)
Benefit 4 : Ability to leverage multicores (if applicable)
![Page 14: Why you should care about functional programming](https://reader034.vdocument.in/reader034/viewer/2022051817/54881a60b47959e70c8b5650/html5/thumbnails/14.jpg)
Higher Order Functions :Functions which take functions as parameters
![Page 15: Why you should care about functional programming](https://reader034.vdocument.in/reader034/viewer/2022051817/54881a60b47959e70c8b5650/html5/thumbnails/15.jpg)
def repeat(f,x) : return f(x,x)
double(x)
OR
repeat(add,x)
![Page 16: Why you should care about functional programming](https://reader034.vdocument.in/reader034/viewer/2022051817/54881a60b47959e70c8b5650/html5/thumbnails/16.jpg)
I like to imagine HOFs as policy injection
![Page 17: Why you should care about functional programming](https://reader034.vdocument.in/reader034/viewer/2022051817/54881a60b47959e70c8b5650/html5/thumbnails/17.jpg)
Brevity
![Page 18: Why you should care about functional programming](https://reader034.vdocument.in/reader034/viewer/2022051817/54881a60b47959e70c8b5650/html5/thumbnails/18.jpg)
public static <E extends Comparable<? super E>> List<E> quickSort(List<E> arr) { if (arr.size() <= 1) return arr; E pivot = arr.getFirst(); //This pivot can change to get faster results List<E> less = new LinkedList<E>(); List<E> pivotList = new LinkedList<E>(); List<E> more = new LinkedList<E>(); // Partition for (E i: arr) { if (i.compareTo(pivot) < 0) less.add(i); else if (i.compareTo(pivot) > 0) more.add(i); else pivotList.add(i); } // Recursively sort sublists less = quickSort(less); more = quickSort(more); // Concatenate results less.addAll(pivotList); less.addAll(more); return less;}
![Page 19: Why you should care about functional programming](https://reader034.vdocument.in/reader034/viewer/2022051817/54881a60b47959e70c8b5650/html5/thumbnails/19.jpg)
qsort1 :: Ord a => [a] -> [a]qsort1 [] = []qsort1 (p:xs) = qsort1 lesser ++ [p] ++ qsort1 greater where lesser = filter (< p) xs greater = filter (>= p) xs
![Page 20: Why you should care about functional programming](https://reader034.vdocument.in/reader034/viewer/2022051817/54881a60b47959e70c8b5650/html5/thumbnails/20.jpg)
Think different :
![Page 21: Why you should care about functional programming](https://reader034.vdocument.in/reader034/viewer/2022051817/54881a60b47959e70c8b5650/html5/thumbnails/21.jpg)
Recursion or Comprehensions instead of Loops
![Page 22: Why you should care about functional programming](https://reader034.vdocument.in/reader034/viewer/2022051817/54881a60b47959e70c8b5650/html5/thumbnails/22.jpg)
Pattern Matching instead of if conditions
![Page 23: Why you should care about functional programming](https://reader034.vdocument.in/reader034/viewer/2022051817/54881a60b47959e70c8b5650/html5/thumbnails/23.jpg)
Pattern Matching instead of State Machines
![Page 24: Why you should care about functional programming](https://reader034.vdocument.in/reader034/viewer/2022051817/54881a60b47959e70c8b5650/html5/thumbnails/24.jpg)
Information Transformation instead of sequence of tasks
![Page 25: Why you should care about functional programming](https://reader034.vdocument.in/reader034/viewer/2022051817/54881a60b47959e70c8b5650/html5/thumbnails/25.jpg)
Persistent Data Structures
![Page 26: Why you should care about functional programming](https://reader034.vdocument.in/reader034/viewer/2022051817/54881a60b47959e70c8b5650/html5/thumbnails/26.jpg)
Powerful concurrency constructs : Actors
![Page 27: Why you should care about functional programming](https://reader034.vdocument.in/reader034/viewer/2022051817/54881a60b47959e70c8b5650/html5/thumbnails/27.jpg)
Software Transactional Memory
![Page 28: Why you should care about functional programming](https://reader034.vdocument.in/reader034/viewer/2022051817/54881a60b47959e70c8b5650/html5/thumbnails/28.jpg)
At what cost ?
![Page 29: Why you should care about functional programming](https://reader034.vdocument.in/reader034/viewer/2022051817/54881a60b47959e70c8b5650/html5/thumbnails/29.jpg)
Retraining the brain: Fixed Cost
(Remember OO?)
![Page 30: Why you should care about functional programming](https://reader034.vdocument.in/reader034/viewer/2022051817/54881a60b47959e70c8b5650/html5/thumbnails/30.jpg)
Actual development costs (variable) likelyto be lesser.
Could not find specific case studies.
![Page 31: Why you should care about functional programming](https://reader034.vdocument.in/reader034/viewer/2022051817/54881a60b47959e70c8b5650/html5/thumbnails/31.jpg)
Why ?
![Page 32: Why you should care about functional programming](https://reader034.vdocument.in/reader034/viewer/2022051817/54881a60b47959e70c8b5650/html5/thumbnails/32.jpg)
Programs are often smaller
![Page 33: Why you should care about functional programming](https://reader034.vdocument.in/reader034/viewer/2022051817/54881a60b47959e70c8b5650/html5/thumbnails/33.jpg)
Have a cleaner expression of intent(what instead of how)
![Page 34: Why you should care about functional programming](https://reader034.vdocument.in/reader034/viewer/2022051817/54881a60b47959e70c8b5650/html5/thumbnails/34.jpg)
Big ball of mud is harder to achieve with pure functions
![Page 35: Why you should care about functional programming](https://reader034.vdocument.in/reader034/viewer/2022051817/54881a60b47959e70c8b5650/html5/thumbnails/35.jpg)
Better future proofing in terms of beingable to leverage multicore
![Page 36: Why you should care about functional programming](https://reader034.vdocument.in/reader034/viewer/2022051817/54881a60b47959e70c8b5650/html5/thumbnails/36.jpg)
Once you are able to read code written in functional style, its a lot more enjoyable
![Page 37: Why you should care about functional programming](https://reader034.vdocument.in/reader034/viewer/2022051817/54881a60b47959e70c8b5650/html5/thumbnails/37.jpg)
Faster, better, (cheaper?) and Enjoyable!