2. Introducción al lenguaje de programación Lua - AdrianN17/Tutorial_Love2d_Top_Down_shooter GitHub Wiki
Que es Lua?
Lua es un lenguaje de Scripting, interpretado y de tipado dinámico, creado por miembros del grupo de Tecnología en Computación Gráfica (Tecgraf) en la Pontificia Universidad Católica de Río de Janeiro . Es un lenguaje minimista, que se utiliza generalmente incrustado en un programa mas grande, generalmente en codigo C o C++
Terminologias
Un lenguaje de scripting es un lenguaje que es interpretado en tiempo de ejecución. Ejemplo de lenguajes de scripting:
- Lua
- Python
- Javascript
- PHP
Tipado dinámico es cuando una variable puede tomar diferentes valores, por ejemplo:
local x=1
print(x) -- imprime un numero
x="a"-- es valido
print(x) -- imprime un caracter
Frente a un lenguaje de tipado estático como Java.
int x=1;
System.out.println(x);
x="a"; // genera un error
Sintaxis básica de Lua
Lua se caracteriza por ser un lenguaje muy amigable para el programador, esta alejado de la sintaxis C, colocandolo en términos sencillos, no se utilizan '{}' o ';' , teniendo una similitud a Python en ese sentido. Opcionalmente, si estas acostumbrado a colocar ';' al finalizar una linea de código, Lua acepta el ';' al finalizar.
Aplica los mismos conceptos que cualquier otro lenguaje de programación.
Comentarios
Los comentarios en Lua se pueden generar de 2 maneras
Para una linea se utiliza --
Para mas de una linea se utiliza ** -- -- **
-- Esto es un comentario
--[[
Esta es un
comentario
]]--
Variables
Las variables de Lua por defecto son Globales, una similitud seria al public en las clases de Java
public x=0;
Es igual a
x=0
para solucionar eso, se debe declarar antes de la variable el argumento local
local x=0
En lua es posible declarar varias variables al mismo tiempo
local x,y,z=0,1,0
Tipos de datos
En Lua existen 8 tipos de datos, de los cuales los mas utilizados son:
- number
- string
- function
- table
- nil
nil viene a ser null, vacio.
Operadores
Existen Operadores Aritméticos, Relacionales y Lógicos.
Aritmético
1+1 -- suma, da 2
1-1 -- resta, da 0
1*2 -- multiplicacion, da 2
2/2 -- division, da 1
2%2 -- modulo, da 0
2^2 -- exponente, da 4
-1 -- negativo, da -1
Relacionales
1==1 -- comparacion
1~=0 -- diferente
1>1 -- mayor
1<1 -- menor
1>=1 -- mayor igual
1<=1 -- menor igual
Lógicos
1==0 and x==0 -- si, ambos deben coincidir en verdad
1==0 or x==0 -- no, uno de ellos puede ser verdadero y otro falso
not true -- reverso
Miscelaneas
"hola" .. "mundo" -- concatenar
#myarray -- longitud de una cadena o tabla
Estructura condicional
if x<0 then
print("Es menor a 0")
elseif x==0 then
print("Es 0")
else
print("Es mayor a 0")
end
En Lua no existe la sentencia Switch, como en otros lenguajes, teniéndose que utilizar elseif.
Estructura repetitiva
Tal como otros lenguajes de programacion, Lua cuenta con 3 tipos de estructura repetitiva:
- For
- While
- Repeat
for i=0,10,1 do
print(i)
end
while(x==0) do
print("continuare")
end
repeat
print("todavia continuo")
until (x==0)
Ademas, puedes romper un bucle con el parámetro break
for x=0,10,1 do
if(x==2) then
break
end
end
Funciones
Una función es un grupo de sentencias que pueden ser invocadas en cualquier parte de grupo, separadas del código principal.
function programa()
print("La suma es " .. suma(1+3)) -- retorna 4
end
function suma(a,b)
return a+b
end
programa()
Las variables declaradas dentro de la función, si no son con el parámetro global, entonces sera posible acceder a ellas fuera de la misma función.
x=9
function programa()
x=0
end
programa()
print(x) -- devolvera 0
x=9
function programa()
local x=0
end
programa()
print(x) -- devolvera 9
Otra manera de declarar es mediante una función anónima:
f=function(a,b) return print(a+b) end
f(1,2)
También es posible crear funciones locales, tal como sucede con las variables
local function suma(a,b)
print(a+b)
end
Tablas
El concepto de una tabla en Lua es un poco complejo de entender, las tablas vendrían a ser como un Arreglo, mas similar a los ArrayList de Java y Diccionarios en Python, pero de la misma manera, seria un objeto, así como los Json
tabla = {}
tabla[1]=2
print(tabla[1]) -- devuelve 2
vector = {x=1,y=2,z=3}
print(vector.x) -- devuelve 1
print(vector["z"]) -- devuelve 3
Se puede acceder a las variables dentro de un vector de 2 maneras, llamándolo como un atributo, o como un array, pero como si fuese una cadena, en ambos casos el resultado es el mismo
Es posible generar programación orientada a objetos mediante las Tablas en Lua, ya que no se tiene soporte nativo para POO.
Nota: Los arrays en Lua funcionan a partir del indice 1.
Ademas de esto existen varios modos de alterar una tabla, usando las siguientes funciones:
table.insert (table, [pos,] value) table.remove (table [, pos]) table.sort (table [, comp])
table.insert(tabla,4) -- agrego el numero 4 en la ultima posicion, tambien se puede elegir la posicion que se desea colocar
table.insert(tabla,2,4)-- agrega en la posicion 2
table.remove(tabla,1) -- elimino la posicion 1
table.sort(tabla) -- ordena una tabla, esto tambien se puede utilizar con una funcion de ordenamiento
table.sort(tabla,function(a,b) return a > b end)-- ordena de mayor a menor
Iteradores
Los iteradores son maneras mas legibles de recorrer un array.
tabla={1,2,3}
for i=1,tabla#,1 do
print(tabla[i])
end
Es una implementacion genérica, pero también se puede lograr de 2 maneras distintas
tabla={1,2,3}
for i,n in ipairs(tabla) do
print(n)
end
tabla={1,2,3]
for i,n in pairs(tabla) do
print(n)
end
La diferencia entre ipairs y pairs, es que ipairs valida los indices nulos y se detiene. Por ejemplo:
table={1,nil,3}
for i,n in ipairs(tabla) do
print(n)
end
for i,n in pairs(tabla) do
print(n)
end
El primer iterador usando ipairs se detiene cuando llega a nil, mientras que el segundo ignora el nil y continua
ipairs resultado: 1
pairs resultado:1 3
Modulos
En Lua, cuando por ejemplo queremos crear una libreria o llamar un trozo de codigo creado, como por ejemplo
--file suma.lua
function suma(a,b)
print(a+b)
end
Podemos llamarlo de la siguiente manera
--main.lua
require "sumatoria"
suma(1,2) -- resultado 3
Otra manera distinta es utilizando tablas:
--file operaciones.lua
local operaciones={}
function operacion:suma(a,b)
print(a+b)
end
return operaciones
-- file main.lua
local operaciones = require "operaciones"
operaciones:suma(1,2) -- resultado 3
Metatablas
Una metatabla es una tabla que ayuda a modificar el comportamiento, por redundancia una tabla
Existen 2 metodos utilizados
setmetatable (table, metatable) getmetatable (tabla)
Anteriormente se comento que es posible la creación de OOP mediante la utilización de metatablas en Lua.
Corutinas
Son piezas de código que se generan de manera colaborativa, solo una puede ser utilizada a la vez.
No se ha profundizado totalmente en ciertos conceptos ya que se utilizaran mas unos que otros
Librerias
Lua cuenta con librerías para matemática , manejo de excepciones y lectura de ficheros i/o
Ademas cuenta con muchas librerías de terceros en Internet.
Fuentes: