📚Funciones y Librerías Estándar

LUA incluye una serie de funciones y librerías estándar que son fundamentales para realizar operaciones comunes, como manipulación de cadenas, matemáticas, manejo de tablas, conversión de tipos, manejo de fechas y tiempos, y más. A continuación, exploramos estas funciones en detalle.

5.1. Manipulación de Cadenas 📝

LUA proporciona varias funciones para trabajar con cadenas a través de la librería string.

5.1.1. string.len

Devuelve la longitud de una cadena.

local texto = "Hola, mundo"
local longitud = string.len(texto)
print(longitud)  -- Salida: 11

5.1.2. string.sub

Devuelve un subconjunto de la cadena desde el índice de inicio hasta el índice final.

local texto = "Hola, mundo"
local subtexto = string.sub(texto, 1, 4)
print(subtexto)  -- Salida: Hola

5.1.3. string.upper y string.lower

Convierte una cadena a mayúsculas o minúsculas.

local texto = "Hola, Mundo"
local mayusculas = string.upper(texto)
local minusculas = string.lower(texto)
print(mayusculas)  -- Salida: HOLA, MUNDO
print(minusculas)  -- Salida: hola, mundo

5.1.4. string.find

Busca una subcadena dentro de una cadena y devuelve la posición de inicio y fin de la primera ocurrencia. Si no encuentra la subcadena, devuelve nil.

local texto = "Hola, mundo"
local inicio, fin = string.find(texto, "mundo")
print(inicio, fin)  -- Salida: 7  11

5.1.5. string.gsub

Reemplaza todas las ocurrencias de una subcadena por otra. Devuelve la cadena modificada y el número de sustituciones realizadas.

local texto = "Hola, mundo mundo"
local nuevoTexto, n = string.gsub(texto, "mundo", "Lua")
print(nuevoTexto)  -- Salida: Hola, Lua Lua
print(n)  -- Salida: 2

5.1.6. string.reverse

Devuelve una nueva cadena que es la inversa de la cadena original.

local texto = "Hola"
local reverso = string.reverse(texto)
print(reverso)  -- Salida: aloH

5.1.7. string.format

Devuelve una cadena formateada. Es similar a printf en C.

local nombre = "Laura"
local edad = 30
local formattedString = string.format("Hola, soy %s y tengo %d años.", nombre, edad)
print(formattedString)  -- Salida: Hola, soy Laura y tengo 30 años.

5.1.8. string.match y string.gmatch

  • string.match busca la primera ocurrencia de un patrón en una cadena y devuelve la parte que coincide.

local texto = "El número es 1234"
local numero = string.match(texto, "%d+")
print(numero)  -- Salida: 1234
  • string.gmatch devuelve un iterador para encontrar todas las coincidencias de un patrón.

local texto = "uno dos tres"
for palabra in string.gmatch(texto, "%a+") do
    print(palabra)
end
-- Salida:
-- uno
-- dos
-- tres

5.2. Operaciones Matemáticas 🔢

LUA tiene una librería matemática (math) que incluye funciones para realizar operaciones matemáticas comunes.

5.2.1. math.random y math.randomseed

  • math.random devuelve un número aleatorio.

local aleatorio = math.random(1, 100)
print(aleatorio)  -- Salida: un número aleatorio entre 1 y 100
  • math.randomseed establece la semilla para el generador de números aleatorios. Esto es útil para obtener resultados reproducibles.

math.randomseed(os.time())
print(math.random(1, 100))  -- Salida: un número aleatorio entre 1 y 100

5.2.2. math.floor y math.ceil

  • math.floor redondea un número hacia abajo.

local numero = 5.67
local redondeadoAbajo = math.floor(numero)
print(redondeadoAbajo)  -- Salida: 5
  • math.ceil redondea un número hacia arriba.

local redondeadoArriba = math.ceil(5.67)
print(redondeadoArriba)  -- Salida: 6

5.2.3. math.max y math.min

Devuelve el valor máximo o mínimo de una lista de números.

local maximo = math.max(1, 5, 3, 9, 2)
local minimo = math.min(1, 5, 3, 9, 2)
print(maximo)  -- Salida: 9
print(minimo)  -- Salida: 1

5.2.4. math.sqrt

Devuelve la raíz cuadrada de un número.

local numero = 16
local raizCuadrada = math.sqrt(numero)
print(raizCuadrada)  -- Salida: 4

5.2.5. math.abs

Devuelve el valor absoluto de un número.

local negativo = -10
local absoluto = math.abs(negativo)
print(absoluto)  -- Salida: 10

5.2.6. math.pow

Devuelve el resultado de elevar un número a una potencia.

local base = 2
local exponente = 3
local potencia = math.pow(base, exponente)
print(potencia)  -- Salida: 8

5.2.7. math.log y math.exp

  • math.log devuelve el logaritmo natural (base e) de un número.

local numero = 2.71828
local logaritmo = math.log(numero)
print(logaritmo)  -- Salida: 1 (aproximadamente)
  • math.exp devuelve e elevado a la potencia especificada.

local exponente = 1
local exponencial = math.exp(exponente)
print(exponencial)  -- Salida: 2.71828 (aproximadamente)

5.3. Manejo de Tablas 📊

LUA ofrece varias funciones útiles para manipular tablas, como insertar, eliminar y ordenar elementos.

5.3.1. table.insert

Inserta un valor en una tabla en la posición especificada. Si no se especifica la posición, el valor se añade al final.

local frutas = {"manzana", "banana"}
table.insert(frutas, "cereza")
print(frutas[3])  -- Salida: cereza

5.3.2. table.remove

Elimina un valor de una tabla en la posición especificada.

local frutas = {"manzana", "banana", "cereza"}
table.remove(frutas, 2)
print(frutas[2])  -- Salida: cereza

5.3.3. table.sort

Ordena una tabla en orden ascendente.

local numeros = {5, 3, 8, 1}
table.sort(numeros)
for i, v in ipairs(numeros) do
    print(v)  -- Salida: 1 3 5 8
end

5.3.4. table.concat

Concatena los elementos de una tabla en una sola cadena, separados por un delimitador opcional.

local frutas = {"manzana", "banana", "cereza"}
local cadena = table.concat(frutas, ", ")
print(cadena)  -- Salida: manzana, banana, cereza

5.3.5. table.unpack

Devuelve todos los elementos de una tabla como valores separados.

local frutas = {"manzana", "banana", "cereza"}
local primera, segunda, tercera = table.unpack(frutas)
print(primera, segunda, tercera)  -- Salida: manzana banana cereza

5.4. Conversión de Tipos 🔄

En LUA, es común tener que convertir datos de un tipo a otro, especialmente entre cadenas y números.

5.4.1. tonumber

Convierte una cadena a un número. Devuelve nil si la conversión no es posible.

local numero = tonumber("123")
print(numero + 1)  -- Salida: 124

5.4.2. tostring

Convierte un número (u otro valor) a una cadena.

local cadena = tostring(123)
print(cadena .. " es un número")  -- Salida: 123 es un número

5.4.3. type

Devuelve el tipo de una variable.

local numero = 10
local cadena = "Hola"
print(type(numero))  -- Salida: number
print(type(cadena))  -- Salida: string

5.4.4. toboolean

Aunque no existe una función nativa llamada toboolean, LUA considera como true cualquier valor que no sea nil o false.

local valor = 123
if valor then
    print("Es verdadero")  -- Salida: Es verdadero
end

5.5. Manejo de Fechas y Tiempos 🕒

LUA ofrece la librería os para manejar fechas y tiempos.

5.5.1. os.time

Devuelve el tiempo actual en segundos desde el epoch (1 de enero de 1970).

local tiempoActual = os.time()
print(tiempoActual)  -- Salida: número de segundos desde el epoch

5.5.2. os.date

Formatea una fecha y hora en una cadena o en una tabla con componentes separados (día, mes, año, etc.).

local fecha = os.date("*t")
print(fecha.year)   -- Salida: Año actual
print(fecha.month)  -- Salida: Mes actual
print(fecha.day)    -- Salida: Día actual

Puedes formatear la fecha como una cadena específica:

local fechaFormateada = os.date("%Y-%m-%d %H:%M:%S")
print(fechaFormateada)  -- Salida: Fecha y hora actuales en formato YYYY-MM-DD HH:MM:SS

5.5.3. os.difftime

Devuelve la diferencia en segundos entre dos tiempos.

local tiempo1 = os.time()
local tiempo2 = tiempo1 + 3600  -- Una hora después
local diferencia = os.difftime(tiempo2, tiempo1)
print(diferencia)  -- Salida: 3600

5.6. Manejo de Archivos 📁

LUA ofrece funciones para manejar archivos a través de la librería io.

5.6.1. io.open

Abre un archivo en un modo específico (read, write, etc.).

local archivo = io.open("test.txt", "w")
archivo:write("Hola, mundo")
archivo:close()

5.6.2. io.read

Lee datos de un archivo.

local archivo = io.open("test.txt", "r")
local contenido = archivo:read("*all")
print(contenido)  -- Salida: Hola, mundo
archivo:close()

5.6.3. io.write

Escribe datos en el archivo abierto en el modo de escritura.

local archivo = io.open("test.txt", "a")
archivo:write("\nNuevo contenido")
archivo:close()

5.6.4. io.close

Cierra un archivo abierto.

local archivo = io.open("test.txt", "r")
-- Operaciones de lectura aquí
archivo:close()

5.6.5. io.lines

Itera sobre cada línea de un archivo.

for linea in io.lines("test.txt") do
    print(linea)
end

5.7. Ejecución de Comandos del Sistema 🖥️

LUA permite la ejecución de comandos del sistema operativo a través de la función os.execute.

os.execute("mkdir nueva_carpeta")

5.7.1. os.getenv

Devuelve el valor de una variable de entorno.

local path = os.getenv("PATH")
print(path)  -- Salida: valor de la variable de entorno PATH

5.7.2. os.exit

Termina la ejecución del programa.

print("Adiós")
os.exit()

Este bloque de código contiene un Tema 5 más amplio sobre las funciones y librerías estándar en LUA, en un formato que puedes copiar y pegar fácilmente. ¡Espero que te sea útil para profundizar aún más en tu aprendizaje de LUA! 😊

Última actualización