Join 10350+ others. No spamming.
I promise!

Follow us at github.



kblake/functional-programming

149

kblake / functional-programming

Elixir

Organize material to teach functional programming using Elixir


READ ME

A Taste of Functional Programming

Material to introduce functional programming using the Elixir language

Objectives

  • Exposure to functional concepts
  • Use functional parts of your existing language of choice you’ve never used before
  • Lead you to pursue a functional language more in-depth

Paradigm evolution

  • Mathematics (lambda calculus)
  • Computer science
  • spawn of languages and paradigms
    • functional, procedural, imperative, declarative, object-oriented programming (OOP)
  • OOP overload...

OOP limitations

[W]e’re going to be living in a multicore, distributed, concurrent — all the buzz words — world. 
The conventional models we’ve been doing, the OO stuff… is not going to survive in that 
kind of environment.” - Dave Thomas
“OOP promised a cure for the scourge of software complexity. …its weaknesses have become 
increasingly apparent. Spreading state all over the place leads to concurrency issues 
and unpredictable side effects.” - Dave Thomas

Think in Functions not Objects

  • Functions
    • Easy to reason about
    • reliable
    • pure
      • don't modify variables outside of scope
      • no side effects
      • deterministic (reproduciable results)
  • Data transformation
    • ie. Unix pipes - cat foo.log | grep bar | wc -l
  • No side-effects
    • Side effects are:
      • modifying state
      • has observable interaction with external functions
  • Immutability
    • Immutable data is known data
    • Data that is created is not changed
    • Copy and alter
      • Compilers can perform optimizations because of this
      • Garbage collectors are smart about this
    • Avoid race conditions
  • Higher-order functions
    • Functions can receive functions as arguments and return functions
  • Where is my for loop?
    • recursion
    • map, reduct, filter, reject, take, etc.

Some (impure and pure) functional languages

  • LISP, Scheme, Clojure, Erlang, Scala, OCaml, Haskell, F#, Elm, Elixir

Elixir

“Elixir is a dynamic, functional language designed for building scalable and 
maintainable applications. Elixir leverages the Erlang VM, known for running low-latency, 
distributed and fault-tolerant systems, while also being successfully used in web development 
and the embedded software domain.” - http://elixir-lang.org

Approachable code examples that highlight functional concepts

Doing the maths:
(value2 * (value1 + value3)) + value1 * value2

if value1 = 4, value2 = 2, value3 = 0
then result should be 16

(2 * (4 + 0)) + 4 * 2
8 + 8
16

Sources