Skip to content

Commit a562d5b

Browse files
committed
updated json
1 parent 6474cb1 commit a562d5b

File tree

153 files changed

+5018
-377
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

153 files changed

+5018
-377
lines changed

book/chapters/elixir/chapter.adoc

Lines changed: 217 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,217 @@
1+
2+
== El Lenguaje Elixir
3+
4+
Se recomienda seguir el laboratorio web de Elixir
5+
https://markm208.github.io/exbook/chapter1/01/index.html
6+
7+
y los capítulos del libro https://joyofelixir.com/
8+
9+
=== Valores
10+
11+
[,elixir]
12+
----
13+
booleano = true
14+
numero = 123_456
15+
string = "Mi Cadena de Caracteres" <> "Concatenada"
16+
atomo = :un_atomo
17+
funcion = fn _ -> "Hola" end
18+
mapa = %{valor: "hola"}
19+
lista = [1, "dos", :tres]
20+
IO.inspect("Imprimir en Terminal")
21+
# Comentario
22+
----
23+
24+
=== Módulos
25+
26+
Los módulos son definidos de la siguiente forma
27+
28+
[,elixir]
29+
----
30+
defmodule MiModulo do
31+
32+
@constante "Esta constante no puede ser reasignada"
33+
34+
def mi_funcion_publica() do
35+
"Función Pública"
36+
end
37+
38+
defp mi_funcion_privada() do
39+
"Función Privada"
40+
end
41+
end
42+
----
43+
44+
=== Pattern Matching
45+
46+
Esta técnica propia de los lenguajes funcionales, se utiliza para buscar patrones y decidir qué hacer en cada momento.
47+
Debemos pensar en el operador `=` no como un signo igual típico de otros lenguajes,
48+
sino como el que nos encontramos en una función matemática
49+
del tipo `x = a + 1`. Es decir que estamos diciendo que `x` y `a + 1`
50+
tienen el mismo valor.
51+
52+
[,elixir]
53+
----
54+
# a = 1
55+
# b = "elixir"
56+
# c = "ninjas"
57+
{a, b, c} = {1, "elixir", "ninjas"}
58+
----
59+
60+
*Enlaces*
61+
62+
* https://joyofelixir.com/6-pattern-matching
63+
* https://www.youtube.com/watch?v=rz14ierM9Q4
64+
* https://charlascylon.com/2016-02-24-Elixir-y-el-pattern-matching
65+
* https://elixirschool.com/es/lessons/basics/pattern_matching
66+
67+
=== Pipe
68+
69+
La programación puede ser desordenada. De hecho tan desordenada que las llamadas de función pueden estar tan contenidas que sean difícil de entender.
70+
71+
Por ejemplo, toma en consideración las siguientes funciones anidadas:
72+
73+
[,c]
74+
----
75+
foo(bar(baz(nueva_function(otra_function()))))
76+
----
77+
78+
Aquí, pasamos el valor de `otra_function/1` a `nueva_function/1`, y de `nueva_function/1` a `baz/1`, `baz/1` a `bar/1`, y finalmente el resultado de `bar/1` a `foo/1`.
79+
Elixir adopta un enfoque pragmático a este caos sintáctico al darnos el operador pipe.
80+
El operador pipe que luce así `|>` toma el resultado de una expresión, y se lo pasa a la siguiente.
81+
Vamos a echar otro vistazo al código anterior reescrito con el operador pipe.
82+
83+
[,elixir]
84+
----
85+
otra_function()
86+
|> nueva_function()
87+
|> baz()
88+
|> bar()
89+
|> foo()
90+
----
91+
92+
El operador lleva el resultado de la izquierda, y lo pasa a la derecha.
93+
94+
*Enlaces*
95+
96+
* https://elixirschool.com/es/lessons/basics/pipe_operator
97+
98+
=== Dependencias
99+
100+
Para instalar las dependencias debemos utilizar el comando
101+
102+
[,shell]
103+
----
104+
$ mix deps.get
105+
----
106+
107+
Las dependencias están definidas en el archivo `mix.exs`
108+
109+
[,elixir]
110+
----
111+
# Run "mix help deps" to learn about dependencies
112+
defp deps do
113+
[
114+
# {:dep_from_hexpm, "~> 0.3.0"},
115+
# {:dep_from_git, git: "https://github.com/elixir-lang/my_dep.git", tag: "0.1.0"},
116+
]
117+
end
118+
----
119+
120+
=== Formateo
121+
122+
Para formatear automáticamente nuestro código
123+
se utiliza el comando
124+
125+
[,shell]
126+
----
127+
$ mix format
128+
----
129+
130+
Esto permite estandarizar
131+
el estilo del código y no tener problemas al momento
132+
de programar en equipo.
133+
134+
=== Pruebas (Testing)
135+
136+
Para realizar pruebas se utiliza el comando
137+
138+
[,shell]
139+
----
140+
$ mix test
141+
----
142+
143+
=== Pruebas Unitarias
144+
145+
Las pruebas unitarias consisten en aislar una parte del código y comprobar que funciona a la perfección. Son pequeños tests que validan el comportamiento de un objeto y la lógica.
146+
El unit testing suele realizarse durante la fase de desarrollo de aplicaciones de software o móviles. Normalmente las llevan a cabo los desarrolladores, aunque en la práctica, también pueden realizarlas los responsables de QA.
147+
Hay una especie de mito respecto a las pruebas unitarias. Algunos desarrolladores están convencidos de que son una pérdida de tiempo y las evitan buscando ahorrar tiempo.
148+
Nada más alejado de la realidad.
149+
Con ellas se detectan antes errores que, sin las pruebas unitarias, no se podrían detectar hasta fases más avanzadas como las pruebas de sistema, de integración e incluso en la beta.
150+
Realizar pruebas unitarias con regularidad supone, al final, un ahorro de tiempo y dinero.
151+
152+
*Enlaces*
153+
154+
* https://www.yeeply.com/blog/que-son-pruebas-unitarias/
155+
156+
=== Phoenix Framework
157+
158+
Si bien es posible crear backends con _Elixir_ completamente
159+
utilizando `mix` y `plug`. El framework más recomendado es https://www.phoenixframework.org/[*Phoenix*].
160+
161+
Phoenix es un framework de desarrollo web escrito en Elixir que implementa el patrón Model View Controller (MVC) del lado del servidor.
162+
Muchos de sus componentes y conceptos nos resultarán familiares a aquellos que tengamos experiencia en otros frameworks web como Ruby on Rails o Python con Django.
163+
164+
Phoenix ofrece lo mejor de ambos mundos: alta productividad de los desarrolladores y alto rendimiento de las aplicaciones.
165+
También tiene algunos giros nuevos e interesantes, como canales para implementar funciones en tiempo real y plantillas precompiladas para una velocidad increíble.
166+
167+
*Enlaces*
168+
169+
* https://www.phoenixframework.org/
170+
* https://elixir-lang.org/learning.html
171+
172+
=== ¿Por qué utilizar Phoenix frente a las alternativas?
173+
174+
Hoy en día existen diversas alternativas para elaborar soluciones
175+
de backend. Entre las más populares encontramos a
176+
https://github.com/nitrogen[Nitrogen con Erlang], PHP con Laravel, Python con Django, Ruby con Rails,
177+
Java con Springboot y muchas otras con Javascript.
178+
179+
Si bien un proyecto puede ser exitoso, robusto y bien estructurado
180+
con cualquier tecnología. Lo ideal es siempre utilizar
181+
tecnologías que sean altamente cohesionadas y faciliten elaborar sistemas bien estructurados
182+
desde un comienzo, que cuenten con las protecciones necesarias de seguridad. Con estándares y documentación amplia que
183+
faciliten el aprendizaje de nuevos desarrolladores.
184+
185+
_Phoenix_ cuenta con los más de treinta años de la máquina virtual de _Erlang_ para su robustez y altos estándares de seguridad,
186+
además de la sintaxis amigable y moderna del lenguaje de programación _Elixir_.
187+
188+
Debido a la alta concurrencia de las necesidades actuales (con millones de dispositivos conectados a la vez), utilizar
189+
tecnologías que solucionen estos problemas de fábrica es un gran acierto.
190+
191+
El autor _Sasa Juric_ en su charla "El alma de Elixir". Nos muestra por qué razón
192+
es una buena idea utilizar soluciones basadas en la máquina virtual de _Erlang_,
193+
ya que nos permite reducir enormemente la cantidad de dependencias de la solución,
194+
utilizando componentes que vienen de fábrica para resolver problemas comunes en sistemas
195+
distribuidos.
196+
197+
image::erlang.png[]
198+
199+
El simplificar nuestra estructura de servidores al utilizar una base sólida como la _BEAM_,
200+
nos da una reducción de la entropía (menor cantidad de componentes) y una reducción de costos significativa.
201+
202+
Un ejemplo es el caso de la empresa *Pinterest* donde uno de
203+
los sistemas que se ejecutaba en 200 servidores _Python_ ahora se ejecuta en cuatro servidores Elixir.
204+
El efecto combinado de una mejor arquitectura y Elixir ahorró a _Pinterest_ más de $2 millones por año en costos de servidor.
205+
Además, el rendimiento y la confiabilidad de los sistemas aumentaron a pesar de funcionar con mucho menos hardware.
206+
Cuando el sistema de notificaciones se ejecutaba en Java,
207+
estaba en 30 instancias _c32.xl_.
208+
Cuando se cambió a Elixir, podía ejecutarse en 15.
209+
A pesar de ejecutarse en menos hardware, los tiempos de respuesta se redujeron significativamente, al igual que los errores.
210+
211+
Un lenguaje que permite a las empresas ahorrar dinero mientras mejora la confiabilidad y el rendimiento parece una fantasía. Elixir puede demostrar este increíble resultado porque el lenguaje está construido sobre Erlang, una plataforma diseñada para software concurrente que debe permanecer en línea. -Los sitios de comercio y los productos SaaS son solo algunos ejemplos, la mayoría del software empresarial actual tiene este requisito. La historia de Elixir mejorando un producto mientras reduce costos se repite.
212+
213+
*Enlaces*
214+
215+
* https://www.youtube.com/watch?v=JvBT4XBdoUE
216+
* https://paraxial.io/blog/elixir-savings
217+
* https://www.youtube.com/watch?v=xrIjfIjssLE

0 commit comments

Comments
 (0)