Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Introducción a Elixir

Henoc Díaz
February 03, 2016

Introducción a Elixir

Pequeña charla básica para Facilito Talks vía HO

facilito.co/talks :)

Henoc Díaz

February 03, 2016
Tweet

More Decks by Henoc Díaz

Other Decks in Programming

Transcript

  1. ¿Qué retos puede tener una red, telefónica en los años

    80? • No puede ser intermitente @henocdz
  2. ¿Qué retos puede tener una red, telefónica en los años

    80? • No puede ser intermitente • Muchos usuarios @henocdz
  3. ¿Qué retos puede tener una red, telefónica en los años

    80? • No puede ser intermitente • Muchos usuarios • Si existe alguna falla al enlazar una llamada no se debe caer toda la red. @henocdz
  4. ¿Qué retos puede tener una red, telefónica en los años

    80? • No puede ser intermitente • Muchos usuarios • Si existe alguna falla al enlazar una llamada no se debe caer toda la red. • Reducción de costos en hardware. @henocdz
  5. ¿Qué retos puede tener una red, telefónica en los años

    80? • No puede ser intermitente • Muchos usuarios • Si existe alguna falla al enlazar una llamada no se debe caer toda la red. • Reducción de costos en hardware. • Red a nivel mundial. @henocdz
  6. Entonces... Erlang tenía que ser • Altamente concurrente • Tolerante

    a fallos • Usar pocos recursos • Pensado para sistemas distribuidos @henocdz
  7. Además, debe ser fácil de mantener y actualizar. ¡Imaginen a

    miles de ingenieros actualizando cada torre! ! Obvio, no se puede reiniciar todo para actualizar. Tiene que ser en caliente ! @henocdz
  8. Con esto en mente, a alguien se le ocurrió crear,

    entre otras razones, un lenguaje más amigable. @henocdz
  9. José Valim ! Creó Elixir en 2012. • Mayor facilidad

    de extender • Mayor produc3vidad • Compa3bilidad con el poderosísimo Erlang ! @henocdz
  10. Lenguaje Joven • C, Smalltalk 1972; 44 años ! •

    Haskell 1990; 26 años " • Python 1991; 25 años. • Ruby 1995; 21 años • Go 2009; 7 años # • SwiD 2014; 2 años $ @henocdz
  11. Caracterís)cas • Al compilar resulta en bytecode que la Máquina

    Virtual de Erlang (BEAM) puede entender. • Funcional, concurrente y orientado a procesos • Documentación Python-like usando Markdown • PaGern Matching ! • Soporte Unicode y strings UTF-8 • y más. @henocdz
  12. Abre IEx y escribe: iex(1)> IO.puts 'Hola CodigoFacilito a.k.a World!'

    Hola CodigoFacilito a.k.a World! :ok Ya sabes Elixir ✌ @henocdz
  13. IEx Consola interac-va de Elixir. Como las que existen en

    Python, Ruby, PHP y otros. Después de instalar Elixir, tendrás disponible el comando iex así: $ iex Erlang/OTP 18 [erts-7.1] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] [dtrace] Interactive Elixir (1.1.1) - press Ctrl+C to exit (type h() ENTER for help) iex(1)> IO.puts 'Hola CodigoFacilito a.k.a World!' Hola CodigoFacilito a.k.a World! :ok @henocdz
  14. Algunos Helpers Como su nombre lo dice, nos ayudarán al

    momento de u4lizar IEx. • i nos da la mayor can-dad información de lo que le mandemos. • h muestra el docstring del elemento que le mandemos. • reload u-l cuando usamos módulos. Muchos más @henocdz
  15. Pa#ern Matching En elixir no existe la asignación como la

    conocemos: iex(1)> x = 320 No hace lo que te imaginas. Elixir hace todo lo posible por igualar el lado izquierdo de la expresión con el derecho, es así que entonces la variable x valdría 320. @henocdz
  16. Algo más claro de esto: iex(1)> [x, y, z] =

    [2, 3, 'a'] En este caso tenemos la misma estructura, una lista, pero cada variable tomará un valor independiente, entonces: iex(1)> x 2 iex(2)> z a @henocdz
  17. Al mismo (empo, esto sería verdad: iex(1)> [2, 3, 'a']

    = [x, y, z] Considerando que x, y, z 1enen los valores previos. Cuando algo no se pueda igualar, Elixir nos dará un error: iex(1)> [[x]] = [[3, 4, 5]] ** (MatchError) no match of right hand side value: [[3, 4, 5]] Esto lo podemos aplicar en las funciones, podemos tener el mismo nombre para una función pero dependiendo los parámetros ejecutará un bloque dis8nto. @henocdz
  18. Inmutabilidad En elixir no se puede cambiar ningún valor. Cuando

    modificas una cadena realmente estás creando una nueva que incluye esa modificación. Esto pasa con cualquier 0po de dato o estructura. @henocdz
  19. Algunos )pos de dato. # Átomos iex> :soy_un_atomo # Tuplas,

    lo más cercano a listas en otros lenguajes. iex> {:ok, :error, 3, 5} # Listas, representadas en memoria como una estrucuta de listas ligadas iex> [2, 3, 'string'] # Mapas iex> %{'clave' => 'valor'} # Mejor con átomos iex> %{clave: 'valor'} @henocdz
  20. Funciones anónimas anonima = fn lista1, lista2 -> lista1 ++

    lista2 end anonima.([3, 4], [100, 450]) # [3, 4, 100, 450] @henocdz
  21. Módulos Si tenemos este módulo defmodule Calculadora do def suma(a,

    b) do a + b end def resta(a, b) do a - b end def multiplica(a, b) do a * b end end @henocdz
  22. Modulos Podemos hacer esto: iex> Calculadora.suma(100, 5) # mira mamá,

    sin paréntesis: iex> Calculadora.suma 100, 5 @henocdz
  23. También podemos u/lizar |> para ligar funciones. Por ejemplo: 100

    |> Calculadora.suma(5) |> Calculadora.resta(5) |> Calculadora.multiplica(5) # 500 @henocdz
  24. Procesos iex> pid = spawn(fn -> IO.puts 'Hola Proceso' end)

    # Comprobar si está vivo el proceso iex> Process.alive? pid @henocdz
  25. Donde aprender? • Elixir Doc: elixir-lang.org • Ejercicios: exercism.io •

    Libro: Programming Elixir • Libro: The Li5le Elixir & OTP Guidebook • Extras: bit.ly/1Kr0NnV @henocdz