domingo, 18 de julio de 2021

Elixir: Creando un proyecto con Mix

En este post veremos cómo crear un proyecto Elixir usando Mix. Pero, ¿qué es Mix? Mix es una herramienta similar a Maven o Gradle (para quienes usan Java) que nos permite crear, cmpilar, ejecutar y administrar las aplicaciones Elixir.

Tan simple como abrir una terminal y teclear:
$ mix new proyecto
$ cd proyecto
$ mix help 

Esto nos creará un proyecto con el nombre 'proyecto'. Nos ubicamos en la carpeta principal y obtenemos la ayuda.

Alejecutar el comando nos mostrará una lista de los archivos creados:

* creating README.md
* creating .gitignore
* creating .formatter.exs
* creating mix.exs
* creating lib
* creating lib/proyecto.ex
* creating test
* creating test/test_helper.exs
* creating test/example_test.exs

El archivo principal es 'proyecto.ex':
$ ls
$ cat lib/proyecto.ex

Modificamos el archivo principal y creamos un método llamado 'hola' con el clásico programa "Hola, mundo"

proyecto.ex
defmodule Proyecto do
  def hola do 
    "Hola, mundo desde proyecto Elixir"
  end
end

Nota:Es importante saber que los archivos Elixir con la extensión *.exs son interpretados y los archivos con la extensión *.ex son compilados.

Para ejecutar debemos teclear (debemos estar en la misma carpeta del proyecto):
$ iex -S mix
> Proyecto
> Proyecto.hola()
"Hola, mundo desde proyecto Elixir"
Si se edita el archivo se deberá recompilar, para eso usamos 'recompile' y volverá a acompilar el archivo:
$ iex -S mix
> Proyecto
> Proyecto.nuevo_metodo()
"AQUI SALDRIA UN ERROR"
> recompile
> Proyecto.nuevo_metodo()
"Soy un nuevo método"
En próximos post veremos más ejemplos.
Links:
https://elixirschool.com

viernes, 9 de julio de 2021

Erlang: registros (record)


Un registro es un conjunto de campos que contienen los datos que pertenecen a una misma entidad. En base de datos representa una fila, una tupla. En Erlang podemos crear un registro de la siguiente manera:

%% Define un registro 'persona'
-define(persona,{nombre, edad, edo_civil = soltero}).

%% Define un registro 'producto'
-define(producto,{nombre, precio, marca, disponibilidad=true}).

En este ejemplo hemos creado dos registros:

  1. persona
  2. producto

Un registro en Erlang es similar a una estructura en C. Suele utilizarse para almacenar un número fijo de elementos. 

typedef struct{
  char nombre[30];
  char marca[30];
  double precio;
}Producto;

Las expresiones de registro se traducen a expresiones de tupla durante la compilación.

Ejemplo. Crear un registro 'producto' con cuatro atributos: nombre, marca, precio, disponibilidad

modelo.erl
%% @doc Registros en Erlang
-module(modelo).
-author("Code Monkey Jr").
-compile(export_all).
-compile(nowarn_export_all).
-record(producto, {nombre, marca, precio, disponibilidad=true}).


inicio()->
    MyProd = #producto{nombre="Jamon de Viena", marca="El chuletón", precio=86.99},
    io:format("Producto disponible? : ~p~n",[MyProd#producto.disponibilidad]),
    io:format("Nombre: ~p~n",[MyProd#producto.nombre]),
    io:format("Marca: ~p~n",[MyProd#producto.marca]),
    io:format("Precio: ~p~n",[MyProd#producto.precio]).

%% erl
%% c(modelo).
%% modelo:inicio().
En lenguajes más "modernos" como Groovy tendríamos el siguiente resultado:
class Producto{
   String nombre
   String marca
   double precio
   boolean disponibilidad
}
Links:
https://erlangbyexample.org/records

miércoles, 7 de julio de 2021

Elixir: listas y mapas


Las listas son una secuencia ordenada de elementos del mismo tipo. Estos tipos pueden ser numéricos, strings, objetos, etc.

# Lista vacía
lista = []

# Lista llena de números
lista = [1,2,3,4,5]

Las listas son colecciones de datos enlazados. Una lista puede estar vacía, o contener una cabeza head y una cola tail. Es decir que una lista no vacía, estará compuesta por el primer elemento de la lista (head) y el resto de elementos de la lista (tail). 

[head|tail] = [1,2,3,4,5,6]
IO.puts "Head: #{head}"
IO.puts "Tail: #{tail}"

Tuplas

Las tuplas son colecciones valores que pueden ser de distinto tipo. Normalmente tienen entre dos y cuatro valores, ya que hay otros tipos de colecciones mejor preparadas para trabajar con más datos. Las tuplas se definen entre llaves {} .

tupla = {1,:ok,:hello,true, 65,[1,2,3],false,"ABC"}

Listas clave-valor

Básicamente una variante de la lista, solo que con llave-valor.

# listas clave-valor
lista_llave_valor = [nombre: "John Erlang", blog: "alquimista", url: "alquimistadecodigo.com"]

¿Qué pasa con los Mapas?

Los mapas son también colecciones de elementos clave-valor, pero se definen de forma diferente.

# Mapa en Elixir
mapa = %{:ok => 1, :hello => 2, :a => 3}
IO.puts mapa.ok # 1
IO.puts mapa.a # 3

Links:
http://agrega.juntadeandalucia.es/repositorio/02122016/a5/es-an_2016120212_9131705/33_listas.html
https://charlascylon.com/2016-03-21-tipos-colecciones-Elixir

sábado, 3 de julio de 2021

Elixir: sitios para aprender


En posts pasados hemos estado hablando del lenguaje Elixir y su relación con Erlang, pues ambos lenguajes corren sobre la máquina virtual BEAM. Elixir podría ser una extraña combinación entre Erlang y Ruby, pero con lo mejor de ambas partes. En esta ocasión veremos una lista de sitios sobre Elixir que me parecen importantes.


The Inquisitive Developer

Un sitio creado por Kevin Peter, un desarrollador web que ha tenido el interés por mostrar su paso en este lenguaje. El contenido de su sitio es muy interesante. Imperdible para quienes quieren aprender Elixir.

https://inquisitivedeveloper.com/

Sitio oficial de Elixir

El sitio oficial del lenguaje Elixir. Donde podrás descargar el lenguaje y ver los pasos de instalación, guías, documentación y ejemplos.

https://elixir-lang.org/

Sitio oficial de Joy of Elixir

El sitio oficial del libro Joy of Elixir. Donde podrás acceder al contenido del libro de manera online. Además de la opción de poder adquirir el libro.

https://joyofelixir.com/

Sitio oficial de Phoenix Framework

El sitio oficial de Phoenix Framework. Si quieres usar Elixir para tus desarrollos web este sitio es el ideal para comenzar.

https://www.phoenixframework.org/

Alias Crespo Blogspot

Blog creado por Emmanuel Goette, Alias Crespo. Un blog sobre muchas cosas, muchas. Donde podrás encontrar muchos recursos, ejemplos, etc. sobre Elixir, Erlang, etc. Imperdible para todos los desarrolladores.

https://emanuelpeg.blogspot.com/

Elixir School

Sitio para aprender sobre el lenguaje Elixir. Ideal para principiantes.

https://elixirschool.com/es/

Elixir School

Sitio para aprender sobre el lenguaje Elixir. Ideal para principiantes.

https://elixirschool.com/es/