Skip to content

kblake/functional-programming

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 

Repository files navigation

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

About

Organize material to teach functional programming using Elixir

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 6