Save 37% off PRO during our Black Friday Sale! »

Introducción a Elixir

Introducción a Elixir

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

facilito.co/talks :)

A04788bd45feba612272eaef0f4a01ee?s=128

Henoc Díaz

February 03, 2016
Tweet

Transcript

  1. ! Primeros pasos y por dónde con0nuar. " @henocdz

  2. Primero un poco de historia ! @henocdz

  3. Ericsson creó Erlang en 1986 ! Open source hasta 1998.

    @henocdz
  4. Con el obje)vo de mejorar las telecomunicaciones. (Supongamos que son

    torres de telecomunicaciones) @henocdz
  5. Pensemos ! ¿Qué retos puede tener una red, telefónica en

    los años 80? @henocdz
  6. ¿Qué retos puede tener una red, telefónica en los años

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

    80? • No puede ser intermitente • Muchos usuarios @henocdz
  8. ¿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
  9. ¿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
  10. ¿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
  11. Entonces... Erlang tenía que ser • Altamente concurrente • Tolerante

    a fallos • Usar pocos recursos • Pensado para sistemas distribuidos @henocdz
  12. 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
  13. Con esto en mente, a alguien se le ocurrió crear,

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

    de extender • Mayor produc3vidad • Compa3bilidad con el poderosísimo Erlang ! @henocdz
  15. 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
  16. 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
  17. ! @henocdz

  18. Chido ! @henocdz

  19. ¿Por dónde empiezo? @henocdz

  20. 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
  21. 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
  22. 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
  23. Pa#ern Matching El mero mole del asunto. @henocdz

  24. 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
  25. 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
  26. 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
  27. 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
  28. 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
  29. Funciones anónimas anonima = fn lista1, lista2 -> lista1 ++

    lista2 end anonima.([3, 4], [100, 450]) # [3, 4, 100, 450] @henocdz
  30. 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
  31. Modulos Podemos hacer esto: iex> Calculadora.suma(100, 5) # mira mamá,

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

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

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

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