Skip to content

Latest commit

 

History

History
166 lines (156 loc) · 8.58 KB

README.md

File metadata and controls

166 lines (156 loc) · 8.58 KB

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 Functional

  • 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