Objectives
- Ignite an interest in those who have never explored functional programming before
- 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
- Computer Science
- Spawn of languages
- functional
- procedural
- imperative
- declarative
- object-oriented programming
OOP Limitations
"We’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
Thinking in Functions
- Functions
- Easy to reason about
- Reliable
- Pure
- Don't modify variables outside of scope
- No side effects
- Deterministic (reproducible 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
- 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
Here is an out line of topics to come:
- Anonymous functions
- Pattern matching
- Multi-bodied functions
- Higher order functions
- Side effects and state
- Composition
- Enumerables
- Partial function applications
- Recursion
- Concurrency
- Transitioning from OOP to functional
Comments
Post a Comment