Want to create interactive content? It’s easy in Genially!

Get started free

Presentación Introductiva a Elixir

gbmres2704

Created on February 9, 2021

Start designing with a free template

Discover more than 1500 professional designs like these:

Visual Presentation

Terrazzo Presentation

Colorful Presentation

Modular Structure Presentation

Chromatic Presentation

City Presentation

News Presentation

Transcript

Introducción a Elixir

Es Dinámico y Funcional

Contenido

Temas a abordar

Instalación y configuración

Introducción a Elixir

Tipos de datos

Operaciones Básicas

Estructuras de Control

Colecciones

Sección 1:

Introducción a Elixir

¿Qué es Elixir?

Es un lenguaje dinámico enfocado en la productividad, en la extensibiliad y en la concurrencia. Una de sus grandes potencias es la meta-programación que nos ayuda a evitar repetir una y otra vez el mismo código y reduce al mínimo las típicas plantillas.

  • Apareció el 9 de Enero del 2011.
  • Licencia de software libre de Apache.
  • Se basa del lenguaje de programación funcional ERLANG.
  • Lenguaje funcional, inmutable con una sintáxis fácil de entender.

Características de Elixir

  • Lenguaje dinámico.
  • Productividad.
  • Extensibilidad.
  • Concurrencia
  • Mejor estructura
  • Disminución de errores

Introducción a Elixir

"Elixir es un lenguaje de programación dinámica y funcional, diseñado para crear aplicaciones escalables y mantenibles"

Elixir corre sobre la máquina virtual de Erlang (BEAM). ESto hace que el lenguaje, a pesar de ser muy joven, sea robusto y con mucha funcionalidad

IMPORTANTE: El desarrollo en Elixir utiliza el paradigma de programación funcional (funciones y módulos)

Sección 2:

Instalación y Configuración

Proceso de instalación y configuración

Paso 1

Paso 4

Paso 2

Paso 3

Preparación previa a la instalación

Instalación y configuración de Nodejs

Instalación y configuración de Erlang

Instalación y configuración de Elixir

+ info

+ info

+ info

+ info

Paso 1: Preparación previa a la instalación

$ sudo apt install curl git

Paso 1.1

Paso 1.2

$ git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.7.3

$ echo -e '\n. $HOME/.asdf/asdf.sh' >> ~/.bashrc$ echo -e '\n. $HOME/.asdf/completions/asdf.bash' >> ~/.bashrc $ source ~/.bashrc

Paso 1.3

Paso 1.4

$ asdf update

$ asdf Verificar que la version sea mayor a v0.7.8-4a3e3d6

Paso 1.5

Paso 2: Instalación y configuración de Erlang

Paso 2.1

$ asdf plugin-add erlang https://github.com/asdf-vm/asdf-erlang.git

$ asdf install erlang 24.0.3

Paso 2.2

IMPORTANTE: Si en el código se visualiza "Building Erlang/OTP 24.0.3 (asdf_24.0.3), please wait...WARNING: It appears that a required development package" realizar el paso 2.2.1 y paso 2.2.2, de no ser así, omitir.

Paso 2.2.1

$ sudo apt install libssl-dev make automake autoconf libncurses5-dev gcc

Paso 2.2.2

$ asdf install erlang 24.0.3

Paso 2.3

$ asdf global erlang 24.0.3

Paso 2.4

$ asdf list

Paso 3: Instalación y configuración de Elixir

Paso 3.1

$ asdf plugin-add elixir https://github.com/asdf-vm/asdf-elixir.git

Paso 3.2

$ asdf install elixir 1.12.2-otp-24

Paso 3.3

$ asdf global elixir 1.12.2-otp-24

Paso 3.4

$ asdf list

Paso 4: Instalación y configuración de NodeJS

Paso 4.1

$ asdf plugin-add nodejs https://github.com/asdf-vm/asdf-nodejs.git

Paso 4.2

$ bash ~/.asdf/plugins/nodejs/bin/import-release-team-keyring

Paso 4.3

$ asdf install nodejs 14.15.1

Paso 4.4

$ asdf global nodejs 14.15.1

Paso 4.5

$asdf list

Prueba de instalación

Paso 02

Paso 03

Paso 01

Ejecutando la consola interactiva iex (Interactive Elixir), que nos permite evaluar expresiones Elixir

Salir de la consola: presione Ctrl + C dos veces.

Se realizan algunas operaciones básicas de Elixir. Ejemplo: "Hola mundo", 2+3, String.length("Hola mundo").

Sección 3:

Tipos de datos

Tipos de Datos

Booleanos

Enteros

Binarios, octales y hexadecimales

Flotante

Tipos de Datos

Nil

Cadenas

Átomos

Tipos de Datos - Enteros

Representa números enteros positivos y negativos, incluyendo el cero, no tienen decimales y el tamaño representado puede ser tan grande como memoria tengas en el sistema.

Tipos de Datos - Enteros

EL MÓDULO INTEGER: Provee de funciones útiles para convertir a cadena, a lista de caracteres, para separar los dígitos de un número o viceversa, obtener el máximo común divisor de dos números, entre otros.

Tipos de Datos - Flotante

Representa números de coma flotante. Ej. -12-4, 0.5, 100.67.También se pueden escribir de forma científica especificando la base en formato decimal, la letra "e " (exponente base 10) y el número del exponente para la base 10. Ej. 2.0e1 nos da como resultado 20.0

Tipos de Datos - Flotante

EL MÓDULO FLOAT: podemos encontrar funciones para conversión a lista de caracteres, a cadena de texto, funciones para redondear hacia abajo y hacia arriba. También para hacer un redondeo estándar y una función para obtener dos números enteros representados en fracción en función de un número dado.

Tipos de Datos - Binarios, Octales y hexadecimales

Se puede especificar la base en la que se representa un número entero, anteponiendo un prefijo específico a cada número escrito:

  • 0x: prefijo para número hexadecimal
  • 0b: prefijo para número binario
  • 0o: prefijo para número octal

Tipos de Datos - Booleanos o lógicos

Este tipo de dato solo tiene dos representaciones posibles: true o false. Se obtiene principalmente a través del uso de los literales y los operadores de comparación, además de los nexos lógicos.

Tipos de Datos - Átomos

Átomos: un átomo es una constante cuyo valor es su propio nombre.

Los átomos son iguales si sus nombres son iguales.

A menudo se utilizan para expresar el estado de una operación, mediante el uso de valores como :ok y :error.

Elixir tiene una construcción llamada alias que comienzan en mayúsculas y también son átomos

Tipos de Datos - Nulo (nil)

En realidad, es otro átomo con significado especial que permite escribirse sin el uso de los dos puntos. El significado de este átomo es la ausencia de tipo.

Hay que tener presente que en funciones como Kernel.is_atom/1 usando una variable o el valor directo, siempre obtenemos true, ya que se trata de un átomo

Tipos de Datos - Cadenas

Las cadenas en Elixir están codificas en UTF-8 y encerradas en comillas dobles:

Las cadenas soportan salto de línea o secuencias de escape:

Tipos de Datos - Cadenas

MÓDULO STRING: Proporciona funciones para poder cambiar el texto a mayúscula o a minúscula e incluso capitalizar el texto. También podemos darle la vuelta al texto, obtener su tamaño, tomar el primer, el último u otro caracter de la cadena especificando su posición.

Tipos de Datos - Cadenas

La función String también nos permiten comprobar si el texto termina con un sufijo dado, o si comienza con un prefijo dado, incluso si contiene un trozo de texto dado.

Puedes ver estas y más funciones en la documentación del módulo String: https://hexdocs.pm/elixir/String.html

Sección 4:

Operaciones Básicas

Operaciones y comparaciones

Aritmética

Comparación

Comparación estricta

Operaciones y comparaciones

Concatenar cadenas

Booleanos

and, or, not

interpolación de cadenas

Sección 5:

Colecciones

Colecciones

Listas

Tuplas

Mapas

Colecciones - Listas

Listas: Son simples colecciones de valores, las cuales pueden incluír múltiples tipos de datos y pueden incluír valores no únicos.

Las listas son vectores de información heterogénea, es decir, puden contener información de distintos tipos, ya sean números, átomos, tuplas, estructuras, mapas u otras listas.

Se usa corchetes para especificar una lista de valores. Los valores pueden ser de cualquier tipo

Colecciones - Listas

Las listas en elixir son listas enlazadas, lo que significa que están representadas internamente en pares que contienen la cabeza y cola de una lista

La cabeza es el primer elemento de una lista y la cola es el resto de la lista: hd() y tl()hd es la abreviatura de “head” (cabeza en inglés), y tl es la abreviatura de “tail” (cola):

NOTA: Los operadores de lista nunca modifican la lista existente. Concatenar o eliminar elementos de una lista devuelve una nueva lista. De esta forma, se puede decir que las estructuras de datos de Elixir son inmutables .

Colecciones - Listas

ALGUNAS OPERACIONES QUE SE PUEDEN HACER CON LISTAS

concatenar dos o más listas:

añadir o sustraer elementos:

Insertar un elemento en una ubicación especfícia:

Eliminar un valor de acuerdo a una ubicación específica:

Colecciones - Listas

Listas de caracteres: Son un tipo específico de lista. Se trata de una lista homogénea de elementos representables como caracteres. Elixir detecta si una lista en su totalidad cumple con esta premisa para tratarla como lista de caracteres.

Si una lista está formada por enteros no negativos, donde cada entero representa un punto de código Unicode, la lista cumple ser Charlist (lista de caracteres)

Elixir usa comillas simples para definir listas de caracteres

Colecciones - Listas

Al igual que con el resto de listas, charlists también soportan la agregación de elementos, de modo que la concatenación se puede realizar de la siguiente forma:

Colecciones - Tuplas

Tuplas:

Son tipos de datos organizativos en elixir. Como las listas, las tuplas pueden contener cualquier valor.

A diferencia de las listas, no pueden incrementar ni decrementar su valor salvo por la redefinición compleata de su estructura

Las llaves indican el inicio y el fin de la definición de la tupla y los elementos separados por comas conforman su contenido.

NOTA: Al igual que las listas, las operaciones que se realizan en tuplas nunca modifican la existente. Agregar o elementos de una tupla devuelve una nueva tupla De esta forma, se puede decir que las estructuras de datos de Elixir son inmutables .

Colecciones - Tuplas

Colecciones - Tuplas

ALGUNAS OPERACIONES QUE SE PUEDEN HACER CON TUPLAS

Obtener un elemento de la tupla:

Insertar elementos al final de la tupla o en una ubicación específica

Cambiar un elemento de la tupla sin modificar el resto:

Eliminar un elemento de la tupla:

Convertir una tupla a lista:

Listas VS tuplas

Las listas se almacenan en la memoria como listas enlazadas. Acceder a la longitud de una lista es una operación lineal: necesitamos recorrer toda la lista para calcular su tamaño.

Las tuplas, por otro lado, se almacenan de forma contigua en la memoria. Esto significa que obtener el tamaño de la tupla o acceder a un elemento por índice es rápido. Sin embargo, actualizar o agregar elementos a las tuplas es costoso porque requiere crear una nueva tupla en la memoria:

Colecciones - Mapas

los mapas son estructuras de datos en donde cada elemento se almacena bajo una clave. Esta clave puede ser de cualquier tipo al igual que su contenido

los mapas se crean con la sintaxis %{} y los pares "llave, valor", se pueden expresar como:

    1. Un átomo como key (Atom Keys)
    2. Una cadena como key (String Keys)

atom key:

Acceder a la clave:

string key:

Acceder a la clave:

Colecciones - Mapas

A diferencia de las listas de palabras clave, los mapas son muy útiles con la coincidencia de patrones.

Un mapa coincide siempre y cuando las claves del patrón existan en el mapa dado. Por lo tanto, un mapa vacío coincide con todos los mapas

Si un elemento duplicado es agregado al mapa, este reemplazará al valor anterior:

Colecciones - Mapas

Hay una sintaxis especial para acceder a las claves que son átomos:

Además podemos cambiar la información contenida en el mapa de la siguiente forma:

NOTA: Esta sintaxis solo puede utilizarse para claves que ya existan en el mapa, de lo contrario mostrará un KeyError

Colecciones - Mapas

El módulo Map, proporciona una API con funciones convenientes para manipular mapas. Si necesitamos agregar un nuevo elemento al mapa, mediante la función Map.put_new/3 agrega el elemento sólo si no existe previamente en el mapa.

De igual forma como las colecciones ya vistas, podemos, obtener un elemento del mapa y convertir el mapa en una lista.

Colecciones - Mapas

Los mapas y las listas implementan el protocolo Enumerable, por lo que muchas funciones para trabajar con mapas se encuentran en el módulo Enum

Se puede reducir la función anónima anterior de la siguiente manera:

Colecciones - Listas

LISTAS DE PALABRAS CLAVE: En Elixir, cuando tenemos una lista de tuplas y el primer elemento de la tupla (es decir, la clave) es un átomo, lo llamamos lista de palabras clave:

Dado que las listas de palabras clave son listas, podemos utilizar todas las operaciones disponibles para las listas.

Sección 6:

Estructuras de Control

Estructuras de Control

if

unless

Estructuras de Control

case

Estructuras de Control

case

cond

Ejercicios : Conceptos Básicos

1 . Declarar 3 valores y determinen cual es el mayor. Pueden elegir la estructura de control que crean que les puede funcionar. Ejemplo: a=5, b= 36, c=-17 Respuesta: el mayor es b=36

2 . Dado 3 valores de los lados un triángulo, determinar si el triángulo es equilátero, isósceles o escaleno Ejemplo: a=44, b= 21, c=44 Respuesta: "El triángulo es equilátero"

Ejercicios : Conceptos Básicos

3. Dada la edad de una persona, determinar si es mayor de edad o no Ejemplo: edad = "23" Respuesta: "Eres mayor de edad"

Ejercicios : Colecciones

1. list_concat. ([1,2,3], [4,5,6]) # => [1,2,3,4,5,6]2. suma. (1, 2, 3) # => 6 3. pair_tuple_to_list.( { 8, 7 } ) #=> [ 8, 7 ] 4. Enum.map [1,2,3,4], fn x -> x + 2 end 5. Utilizar al menos, 3 funciones del módulo List en colecciones de tipo lista 6. Utilizar al menos, 3 funciones del módulo Tuple en colecciones de tipo tupla 7. Utilizar al menos, 3 funciones del módulo Map en colecciones de tipo map

¡Muchas gracias!