Funciones Puras
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
#Temario-BSA - Bash Scripting Avanzado
|
||||
|
||||
---
|
||||
## ¿Qué es una "Función Pura"?
|
||||
En programación, el concepto de la programación pura es aquella función que no cause efectos secundarios en el programa, cuyas funciones estén aisladas del resto del programa y no afecten a nada más que a lo que se le pide que haga.
|
||||
|
||||
### Un ejemplo de una "Función Impura":
|
||||
```SHELL
|
||||
contador=0 # Esto es un estado global
|
||||
|
||||
incrementar() {
|
||||
#Efecto secundario: Se esta modificando una variable externa
|
||||
contador=$((contador + 1))
|
||||
}
|
||||
|
||||
incrementar
|
||||
echo $contador # imprimirá 1
|
||||
incrementar
|
||||
echo $contador # imprimirá 2 (¡El resultado cambió sin cambiar imputs!)
|
||||
```
|
||||
Esta función depende de una variable global y la modifica. Si la ejecutas dos veces, el resultado cambia aunque no le pases argumentos.
|
||||
|
||||
### Un ejemplo de una "Función Pura":
|
||||
```SHELL
|
||||
sumar() {
|
||||
# 1. Se usa 'local' para aislar variables del resto del script
|
||||
local num1=$1
|
||||
local num2=$2
|
||||
|
||||
local resultado=$((num1 + num2))
|
||||
|
||||
# 2. 'Devolver' el valor por salida estándar (stdout)
|
||||
echo "$resultado"
|
||||
}
|
||||
|
||||
# Uso: Capturamos la salida
|
||||
total=$(sumar 10 5)
|
||||
echo "El total es: $total"
|
||||
```
|
||||
Esta función es aislada. Recibe datos, calcula y "devuelve" el dato imprimiéndolo (stdout), sin tocar nada más.
|
||||
@@ -1,13 +1,71 @@
|
||||
En este apartado, me dedico a aprender todo lo que tiene que ver con la terminal. Pondré obviamente apuntes sobre lo que ya sé y sobre lo que no.
|
||||
|
||||
Lo que voy a apuntar va a ser:
|
||||
- Bash Scripting (Hasta nivel avanzado)
|
||||
- `awk`, `sed` y `grep`.
|
||||
- Señales, pipes, TTY, pseudo terminales
|
||||
- ncurses
|
||||
- Procesamiento de ficheros grandes en la terminal
|
||||
# Lo que voy a apuntar va a ser:
|
||||
|
||||
---
|
||||
### 1. Bash Scripting Avanzado
|
||||
Aquí no se va a tratar solo de escribir scripts, sino de:
|
||||
- [[Funciones puras]]
|
||||
- Patrones de diseño en bash
|
||||
- Trampas (`traps`)
|
||||
- Señales
|
||||
- Expansión de parámetros
|
||||
- Arrays asociativos
|
||||
- Subshells
|
||||
- Procesos hijos y paralelismo (`&`, `wait`, `coproc`)
|
||||
- Seguridad en scripts (validación, sanitización, quoting correcto)
|
||||
*Y esto aporta:*
|
||||
**Automatización de sistemas enteros y escritura de pipelines complejos.**
|
||||
|
||||
---
|
||||
### 2. awk/sed/grep a nivel serio
|
||||
- Parsing avanzado de logs
|
||||
- Extracción de datos estructurados
|
||||
- Reescritura de texto
|
||||
- Creación de mini-lenguajes personalizados
|
||||
- Manipulación de CSV, JSON simplificado, logs de sistemas
|
||||
*Y esto aporta:*
|
||||
Con awk, puedo literalmente escribir programas completos.
|
||||
Podría hacer un analizador sintáctico, un intérprete simple o un procesador de logs en tiempo real.
|
||||
|
||||
---
|
||||
|
||||
### 3. Señales, pipes. TTYs y pseudoterminales
|
||||
- Funcionamiento de una terminal
|
||||
- Comunicacion entre procesos
|
||||
- Que pasa por debajo de un pipe
|
||||
- Funcionamiento de los PTY con `except`, `script`, `ssh`, `tmux`
|
||||
- Control de procesos con señales (`SIGINT`, `SIGTERM`, `SIGHUP`)
|
||||
- Capturar e interpretar señales de scripts propios
|
||||
*Y esto aporta:*
|
||||
**Entendimiento de Linux desde dentro.**
|
||||
|
||||
---
|
||||
|
||||
### 4. ncurses
|
||||
- Creación de interfaces interactivas
|
||||
- Menús
|
||||
- Ventanas
|
||||
- Teclas especiales
|
||||
- Actualización dinámica de pantalla sin flickering
|
||||
*Y esto aporta:*
|
||||
Podría crear programas como `htop`, mini editor de texto... Hasta un navegador interactivo que imprima HTML parseado (esto es sadomasoquismo, pero lo voy a hacer igualmente).
|
||||
|
||||
---
|
||||
|
||||
### 5. Procesamiento de ficheros MUY grandes
|
||||
- Streaming (line by line)
|
||||
- Evitar cargar la RAM por completo
|
||||
- `split`, `parallel`, `pv`
|
||||
- Ordenar grandes cantidades de datos sin reventar la memoria (`sort` con flags correctos)
|
||||
- Map-reduce cutre en bash
|
||||
*Y esto aporta:*
|
||||
Analisis de **Big Data** chapucero, pero cumpliré con la función.
|
||||
|
||||
### Cuál es el objetivo de esto:
|
||||
Aprender y profundizar aún más en lo que ya sé y conozco. Tengo pensado dedicarle aproximadamente entre 1 y 2 meses solo a esto.
|
||||
|
||||
Me deja conocimiento como la dominación de la terminal de forma completa, entender Linux desde la raíz, automatización sin dependencia de lenguajes externos, analizado, procesado y transformación de datos masivos, creación de herramientas internas de consola, depuración de sistemas con logs y pipes, creación de interfaces CLI y la construcción de una infraestructura funcional con bash.
|
||||
|
||||
|
||||
Al final de todo, tengo pensado hacer algunos proyectos absurdos, como por ejemplo, un navegador hecho solo con Bash. Es complicado (y roza lo masoquista), pero divertido.
|
||||
Reference in New Issue
Block a user