Introduction to functional programming, with Elixir
-
Upload
kirandanduprolu -
Category
Technology
-
view
45 -
download
2
Transcript of Introduction to functional programming, with Elixir
Introduction to Functional Programmingwith Elixir
Unlearn you some OOP for great good
● OOP is not the only good way to design software
● Assignment & Control flow are not essential to programming
● Locks & Semaphores are not essential to concurrency
Learn you some Functional Programming for good
Functional Programming
● Another programming paradigmo Functions as first class citizenso Higher order functionso Immutable datao Pure functions
Pure Functions
● Stateless● Produces the same output always for
the same input● No side effects
Functional Programming Languages
● Haskell● Erlang/Elixir● Common Lisp and more
● Scala● JavaScript● more
The functional programming Boom
● Physical constraints● Need for:
o Simple concurrency and parallelismo Easier vertical and horizontal scalingo Optimal utilization of resources
Emerging Languages
● Go● Scala● Erlang● Elixir● Rust● Haskell● Nimand more
Elixir?
● Built on top of the Erlang VM● Compiles down to BEAM bytecode
Wth is Erlang?
● Designed for scalability and real-time systems
● Functional● Simplifies concurrent programming● Fault-tolerant (‘let it crash’ philosophy)● Bytecode runs on the Erlang VM
Erlang is used by
● Facebook (Chat)● Amazon● Whatsapp● Yahoo!● Heroku● Github● and more
Story of Whatsapp
● 2 Million connections on a single node● 450 Million users handled by 32
engineers● Acquired by Facebook for $19 Billion● Backend powered by Erlang
Elixir
● Dynamic● Functional● Built on top of the Erlang VM
o implies Concurrent, Distributed and Fault-tolerant
● 1.0.0 was released in Sep 2014● Created by Jose Valim
Why use Elixir?
● All the benefits of Erlang● Easily reuse Erlang libraries
o No additional performance costs● Better tooling, which allows for greater
productivity● Better syntax● Simplified metaprogramming
Concurrency!
Concurrency in erlang/elixir vs other languages is like branching in git vs subversion.
● Its simple and cheap
Everything is an expression
World of Elixir
DataModules
Processes
Datatypes
● Atoms● Integers● Floating point numbers● Binaries● Tuples● Lists● Strings and Character lists● Maps, Hashdicts and Keyword Lists
Modules
● Means of organizing code● Contains all named functions
Functions
● Elixir functions are defined by:o Name
o Arity● Types of functions
o Anonymous & Inline Anonymous inherits scope
o Named does not inherit scope
Pattern Matching
● Assert, not assign● Equals sign isn’t really assignment, its
more like an assertion● Behaviour of tuples, lists and variables
in pattern matching is important to understand
● Ignore values using _● Force use variables using ^
Pipeline operator |>
● Formulating transformation of data● Similar to Linux pipes● Making functions/methods composable● Data |> Method 1 |> Method 2 |>
Method 3
Live Examples
● Sum, Multiply● Factorial, Fibonacci, GCD● List operations● File operations● Maps, Typed maps
Tooling
● Mix, a wonderful build system● First class documentation
o Inline documentationo Doctests
● Dependency Management using Mix● Testing library included
Topics not covered
● Mix, `maven` for Elixiro compatible with hex, the `maven` for Erlang
● OTP● Metaprogramming● Protocols● Structs● Streams, Enumerables, Collectables
Elixir frameworks
● Phoenix: Web framework● Ecto: LINQ for Elixir
More: Awesome Elixir List
Questions?
Interested? You can read more here: https://github.com/hashd/LearnStack/blob/master/notes/elixir.md