Why Functional Programming Matters

ted.neward@newardassociates.com | Blog: http://blogs.newardassociates.com | Github: tedneward | LinkedIn: tedneward

Concepts

What is a programming language?

Concepts

What do programming languages do for us?

Concepts

What is the abstraction principle?

Concepts

In short:

History

In the beginning, God created objects....

History

Functional programming is a different way of thinking about modularizing applications

And, admittedly at times it is a different way of thinking that runs entirely contradictory to the way that object-oriented programmers think

Functional Programming

What's it mean, exactly?

Functional Programming

Core functional concepts

Functional Programming

Immutable values

Values over variables

Functional Programming

A functional pseudocode example


let x = 0      // or sometimes "val"
let y = 1
let z = x + y

Functional Programming

Functions as first-class values

Functional Programming

Higher-order functions


let numbers = [1, 2, 3, 4, 5]
let squares = numbers.map((num) -> num * num);
// squares = [1, 4, 9, 16, 25]

Functional Programming

Function composition

Functional Programming

Partial application

Functional Programming

Partial application


let add x y = x + y

let five = add 2 3  // = 5
let addBy2 = add 2  // = (anonymous fn) = 2 + y
let six = addBy2 addBy2 2 // = 6

Functional Programming

Currying

Functional Programming

Expressions-not-statements

Functional Programming

Laziness

Functional Programming

Sequences

Functional Programming

Optional functional concepts

Functional Programming

Strongly-typed

Type-inferenced

Functional Programming

Recursion

Functional Programming

Tuples, lists

Functional Programming

Pattern-matching

Examples

Seeing it in action

Summary

Wrapping up

Summary

Abstractions

Summary

Continuations

Concurrency

Summary

Functional programming is not going to replace object-orientation

The best functional usage, then, will supplement your objects, and vice versa

Summary

Functional programming represents a new tool in your toolbox, not wholesale rejection of prior art