Skip to content

Instantly share code, notes, and snippets.

@farribeiro
Last active March 16, 2024 16:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save farribeiro/2bd0b3b4c43781c40f239a3d9e284ed4 to your computer and use it in GitHub Desktop.
Save farribeiro/2bd0b3b4c43781c40f239a3d9e284ed4 to your computer and use it in GitHub Desktop.

Qualidades

Lua é uma linguagem de programação conhecida por sua simplicidade, eficiência e flexibilidade. Com uma sintaxe limpa e fácil de aprender, Lua oferece um tempo de execução rápido e um consumo de recursos baixo, tornando-a ideal para uma variedade de aplicações, desde jogos e aplicativos da web até sistemas embarcados. Sua portabilidade permite que seja facilmente integrada em diferentes plataformas e sistemas operacionais, enquanto sua capacidade de ser incorporada em outras aplicações a torna uma escolha popular para scripts de extensão. Além disso, Lua oferece suporte nativo para programação funcional e orientada a objetos, proporcionando aos desenvolvedores a flexibilidade de escolher o estilo de programação que melhor se adapta às suas necessidades. Com uma comunidade ativa e documentação abrangente, Lua continua a ser uma opção atraente para desenvolvedores em busca de uma linguagem poderosa e versátil.

Lua é uma linguagem de programação repleta de qualidades notáveis. Sua máquina virtual, também conhecida como VM, é compacta em termos de binário, ocupando pouco espaço. Além disso, sua simplicidade é exemplar, sendo tão acessível que até crianças programam em Lua, como evidenciado pela plataforma Roblox. A capacidade de ser incorporada como linguagem de scripts em diversos jogos e programas a torna extremamente versátil, podendo até mesmo ser integrada em dispositivos físicos como catracas, relógios de ponto e Internet das Coisas devido ao seu tamanho, que é inferior a meio disquete de 1.44MB. Lua é especialmente projetada para uma simbiose perfeita com C, o que a torna uma escolha preferencial para muitos desenvolvedores. Sua eficiência também é notável, muitas vezes superando a velocidade do Python devido à sua natureza menos "bloated". E não podemos deixar de mencionar que há um interpretador disponível para Android na Play Store, ampliando ainda mais seu alcance e utilidade.

Limitações (Referente ao lua 5.4 e luajit)

A linguagem não tem Just in Time, índice começando na posição 0, inteiros, Switch-Case, Regex, Ternário e Structs/Ponteiros de structs. Tem Orientação a objeto parcial (note que não existe uma linguagem que cobre 100% OOP).

Mas essas limitações tem uma flexibilidade pois tem recursos similares, como tabelas e funções de primeira classe simulando Switch-Case, atribuições condicionais simulando o ternário entre outras aplicações.

Exceção: O luajit como próprio nome diz possui Just in Time – embora tenha uma implementação antiga do lua e hoje Está em modo de manutenção apenas. Algumas pessoas me alertaram que é possível usar inteiros na versão 5.4 do PUC Rio.


("Texto"):gsub(...)

Explicação do código: Açúcares sintáticos são recursos da linguagem que simplificam a escrita de código, tornando-o mais legível e expressivo.


local square = function(x) return x * x end

-- Açúcar sintático
print (square(2))

Explicação do código: Em Lua, você pode definir funções anônimas usando a sintaxe function() ... end


local a, b, c = 1, 2, 3

Exemplo do código: Permite atribuição múltipla, o que significa que você pode atribuir vários valores a várias variáveis em uma única linha de código.


a = (b > 1) and 1 or 2

Explicação do código: Esse código é a atribuição condicional, embora seja para fazer atribuições de variáveis o desenvolvedor pode usar como um recurso similar ao ternário de C/C++


-- Definindo funções simples
function soma(a, b)
	return a + b
end

function subtracao(a, b)
	return a - b
end

function multiplicacao(a, b)
	return a * b
end

-- Função que recebe uma operação como argumento
function operacao_matematica(a, b, operacao)
	return operacao(a, b)
end

-- Usando as funções em operacao_matematica e Exibindo os resultados
print("Soma:", operacao_matematica(5, 3, soma))
print("Subtração:", operacao_matematica(7, 2, subtracao))
print("Multiplicação:", operacao_matematica(4, 6, multiplicacao))

Uma outra abordagem sobre esse código:

handlers ={
	["test"] = function()
	-- código
	end,

	["test2"] = function()
	-- código
	end
}

if not arg or arg == nil then
	os.exit(1)
end

handlers[arg[1]]()

Explicação do código: Funções de primeira classe, é um recurso similar ao ponteiro para função do C/C++ e do switch-case


-- Função para exibir os elementos de um vetor
local function printArray(arr)
	print(table.concat(arr, " "))
end

-- Função para ordenar um vetor usando o algoritmo bubble sort
local function bubbleSort(arr)
	local len = #arr
	local swapped

	repeat
		swapped = false

		for i = 1, len - 1 do
			if arr[i] > arr[i + 1] then
				-- Trocar elementos de posição em um vetor
				arr[i], arr[i+1] = arr[i+1], arr[i]
				swapped = true
			end
	  end
		len = len - 1
	until not swapped
end

-- Exemplo de uso:
local vetor = {3, 0, 1, 8, 7, 2, 5, 4, 6, 9}

print("Vetor original:")
printArray(vetor)

bubbleSort(vetor)

print("\nVetor ordenado:")
printArray(vetor)

Explicação do código: Esse é a implementação do bubblesort, com tabelas são mutáveis, a tabla passada para função é apontada (ponteiro?) para a variável vetor


a = "10" + 1
do
	local b = 10 .. 1
	print("b:", b)
end

print ("a:", a)
print("b:", b)

Explicação do código: Variáveis só é local se você declarar, não importa o bloco onde se encontra. Se precisar de de um bloco de código para algumas variáveis locais pode usar dessa maneira e lua também pode somar e concatenar. A variável a deve imprimir na tela o valor numérico 11 e a variável b deve imprimir na tela a string 101 e a impressão fora do bloco deve imprimir nil


if ... then ... end
fun1() fun2()

Explicação do código: Inline statement


x = os.execute

Explicação do código: pode instanciar funções em uma variável


print "Hello"
print {}

Explicação do código: Quando uma função tem apenas um argumento, exclusivamente string e tabelas e assim pode omitir os parenteses. variáveis mesmo que sejam string, números, string com açucares sintáticos não são permitidos

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment