Skip to content
Organize material to teach functional programming using Elixir
Branch: master
Clone or download
Latest commit ee0023a Apr 30, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
code
README.md Update README.md Apr 30, 2019

README.md

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, reduce, 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

Sources

You can’t perform that action at this time.