SlideShare a Scribd company logo
1 of 37
Download to read offline
Why you should care about
 Functional Programming




       Dhananjay Nene

       TechWeekend 5
     December 18th, 2010
What is functional programming about ?
Functions = input + transformation + output
def add(x,y) : return x + y

def double(x) : return 2 * x
NO side effects
Unit Testing or Integration Testing
     when NO side effects ?
Benefit 1 : Testability
Benefit 2 : Easier Integration
All variables are final and are an alias to the
            result of a computation
A variable thus cannot have a different value at
             different points in time
Benefit 3 : Concurrency (no locking)
Constructs to easily parallelise operations
Benefit 4 : Ability to leverage multicores
              (if applicable)
Higher Order Functions :
Functions which take functions as parameters
def repeat(f,x) : return f(x,x)

          double(x)

             OR

        repeat(add,x)
I like to imagine HOFs as policy injection
Brevity
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;
}
qsort1 :: Ord a => [a] -> [a]
qsort1 [] = []
qsort1 (p:xs) = qsort1 lesser ++ [p] ++ qsort1 greater
  where
     lesser = filter (< p) xs
     greater = filter (>= p) xs
Think different :
Recursion or Comprehensions instead of Loops
Pattern Matching instead of if conditions
Pattern Matching instead of State Machines
Information Transformation instead of sequence
                    of tasks
Persistent Data Structures
Powerful concurrency constructs : Actors
Software Transactional Memory
At what cost ?
Retraining the brain: Fixed Cost


        (Remember OO?)
Actual development costs (variable) likely
              to be lesser.

  Could not find specific case studies.
Why ?
Programs are often smaller
Have a cleaner expression of intent
      (what instead of how)
Big ball of mud is harder to achieve with pure
                   functions
Better future proofing in terms of being
       able to leverage multicore
Once you are able to read code written in
 functional style, its a lot more enjoyable
Faster, better, (cheaper?) and Enjoyable!

More Related Content

What's hot

Chapter12 array-single-dimension
Chapter12 array-single-dimensionChapter12 array-single-dimension
Chapter12 array-single-dimension
Deepak Singh
 
10. array & pointer
10. array & pointer10. array & pointer
10. array & pointer
웅식 전
 

What's hot (20)

Introduction to datastructure and algorithm
Introduction to datastructure and algorithmIntroduction to datastructure and algorithm
Introduction to datastructure and algorithm
 
Linear data structure concepts
Linear data structure conceptsLinear data structure concepts
Linear data structure concepts
 
Recursion(Advanced data structure)
Recursion(Advanced data structure)Recursion(Advanced data structure)
Recursion(Advanced data structure)
 
Pointers in C/C++ Programming
Pointers in C/C++ ProgrammingPointers in C/C++ Programming
Pointers in C/C++ Programming
 
Dynamic memory Allocation in c language
Dynamic memory Allocation in c languageDynamic memory Allocation in c language
Dynamic memory Allocation in c language
 
Memory allocation in c
Memory allocation in cMemory allocation in c
Memory allocation in c
 
Pointers in c++
Pointers in c++Pointers in c++
Pointers in c++
 
Function overloading
Function overloadingFunction overloading
Function overloading
 
Ch10 Recursion
Ch10 RecursionCh10 Recursion
Ch10 Recursion
 
Recursion
RecursionRecursion
Recursion
 
Chapter12 array-single-dimension
Chapter12 array-single-dimensionChapter12 array-single-dimension
Chapter12 array-single-dimension
 
16 dynamic-memory-allocation
16 dynamic-memory-allocation16 dynamic-memory-allocation
16 dynamic-memory-allocation
 
10. array & pointer
10. array & pointer10. array & pointer
10. array & pointer
 
Big o notation
Big o notationBig o notation
Big o notation
 
Pointers and Dynamic Memory Allocation
Pointers and Dynamic Memory AllocationPointers and Dynamic Memory Allocation
Pointers and Dynamic Memory Allocation
 
Array Presentation (EngineerBaBu.com)
Array Presentation (EngineerBaBu.com)Array Presentation (EngineerBaBu.com)
Array Presentation (EngineerBaBu.com)
 
Pointers in c++
Pointers in c++Pointers in c++
Pointers in c++
 
Application of hashing in better alg design tanmay
Application of hashing in better alg design tanmayApplication of hashing in better alg design tanmay
Application of hashing in better alg design tanmay
 
Recursion and Sorting Algorithms
Recursion and Sorting AlgorithmsRecursion and Sorting Algorithms
Recursion and Sorting Algorithms
 
Hashing notes data structures (HASHING AND HASH FUNCTIONS)
Hashing notes data structures (HASHING AND HASH FUNCTIONS)Hashing notes data structures (HASHING AND HASH FUNCTIONS)
Hashing notes data structures (HASHING AND HASH FUNCTIONS)
 

Similar to Why you should care about functional programming

Столпы функционального программирования для адептов ООП, Николай Мозговой
Столпы функционального программирования для адептов ООП, Николай МозговойСтолпы функционального программирования для адептов ООП, Николай Мозговой
Столпы функционального программирования для адептов ООП, Николай Мозговой
Sigma Software
 
conceptsinobjectorientedprogramminglanguages-12659959597745-phpapp02.pdf
conceptsinobjectorientedprogramminglanguages-12659959597745-phpapp02.pdfconceptsinobjectorientedprogramminglanguages-12659959597745-phpapp02.pdf
conceptsinobjectorientedprogramminglanguages-12659959597745-phpapp02.pdf
SahajShrimal1
 

Similar to Why you should care about functional programming (20)

Functional programming
Functional programmingFunctional programming
Functional programming
 
Functional programming 101
Functional programming 101Functional programming 101
Functional programming 101
 
Functional programming
Functional programmingFunctional programming
Functional programming
 
Столпы функционального программирования для адептов ООП, Николай Мозговой
Столпы функционального программирования для адептов ООП, Николай МозговойСтолпы функционального программирования для адептов ООП, Николай Мозговой
Столпы функционального программирования для адептов ООП, Николай Мозговой
 
Functional programming ii
Functional programming iiFunctional programming ii
Functional programming ii
 
Functional Programming
Functional ProgrammingFunctional Programming
Functional Programming
 
Functions In Scala
Functions In Scala Functions In Scala
Functions In Scala
 
Functional Programming with Javascript
Functional Programming with JavascriptFunctional Programming with Javascript
Functional Programming with Javascript
 
C Tutorials
C TutorialsC Tutorials
C Tutorials
 
Functional programming in C++
Functional programming in C++Functional programming in C++
Functional programming in C++
 
Functional programming
Functional programmingFunctional programming
Functional programming
 
DataWeave 2.0 Language Fundamentals
DataWeave 2.0 Language FundamentalsDataWeave 2.0 Language Fundamentals
DataWeave 2.0 Language Fundamentals
 
conceptsinobjectorientedprogramminglanguages-12659959597745-phpapp02.pdf
conceptsinobjectorientedprogramminglanguages-12659959597745-phpapp02.pdfconceptsinobjectorientedprogramminglanguages-12659959597745-phpapp02.pdf
conceptsinobjectorientedprogramminglanguages-12659959597745-phpapp02.pdf
 
Pydiomatic
PydiomaticPydiomatic
Pydiomatic
 
Python idiomatico
Python idiomaticoPython idiomatico
Python idiomatico
 
Teach Yourself some Functional Programming with Scala
Teach Yourself some Functional Programming with ScalaTeach Yourself some Functional Programming with Scala
Teach Yourself some Functional Programming with Scala
 
Scala as a Declarative Language
Scala as a Declarative LanguageScala as a Declarative Language
Scala as a Declarative Language
 
C# programming
C# programming C# programming
C# programming
 
Functional Programming in JavaScript by Luis Atencio
Functional Programming in JavaScript by Luis AtencioFunctional Programming in JavaScript by Luis Atencio
Functional Programming in JavaScript by Luis Atencio
 
An Introduction to Functional Programming at the Jozi Java User Group
An Introduction to Functional Programming at the Jozi Java User GroupAn Introduction to Functional Programming at the Jozi Java User Group
An Introduction to Functional Programming at the Jozi Java User Group
 

More from Dhananjay Nene (6)

Actors, Fault tolerance and OTP
Actors, Fault tolerance and OTPActors, Fault tolerance and OTP
Actors, Fault tolerance and OTP
 
Trends in Technology
Trends in TechnologyTrends in Technology
Trends in Technology
 
ReST (Representational State Transfer) Explained
ReST (Representational State Transfer) ExplainedReST (Representational State Transfer) Explained
ReST (Representational State Transfer) Explained
 
Blogging In Context
Blogging In ContextBlogging In Context
Blogging In Context
 
Programming Language Selection
Programming Language SelectionProgramming Language Selection
Programming Language Selection
 
Contrasting Java And Dynamic Languages
Contrasting Java And Dynamic LanguagesContrasting Java And Dynamic Languages
Contrasting Java And Dynamic Languages
 

Why you should care about functional programming