aprendendo_lua

Tipos de dados básicos em Lua

Observações:

Em Lua, existem oito tipos de dados básicos:

1. nil:

Exemplo:

local variavel = nil

2. boolean:

Exemplo:

local ehVerdadeiro = true
local ehFalso = false

if ehVerdadeiro then
  print("Verdadeiro")
else
  print("Falso")
end

3. number:

Exemplo:

local numeroInteiro = 10
local numeroReal = 3.14

print(numeroInteiro + numeroReal)

Inteiro vs float (Lua 5.4):

Exemplo:

assert(math.type(42) == "integer")
assert(math.type(3.14) == "float")
assert(math.type("oi") == nil)   -- não é número

-- `/` e `^` sempre produzem float:
assert(4 / 2 == 2.0 and math.type(4 / 2) == "float")
assert(2 ^ 3 == 8.0 and math.type(2 ^ 3) == "float")

-- `//` preserva inteiro entre inteiros:
assert(7 // 2 == 3 and math.type(7 // 2) == "integer")
assert(math.type(7.0 // 2) == "float")   -- com float, produz float (3.0)

-- Conversão explícita float -> integer:
assert(math.tointeger(2.0) == 2)
assert(math.tointeger(2.5) == nil)

-- Na comparação, inteiro e float de mesmo valor são iguais:
assert(2 == 2.0)

4. string:

Exemplo:

local nome = "João Silva"
local frase = "Olá, mundo!"

print(nome .. " disse " .. frase)

5. function:

Exemplo:

function soma(a, b)
  return a + b
end

local resultado = soma(2, 3)

print(resultado)

6. userdata:

Exemplo:

-- Não é preciso biblioteca externa para ver um userdata de verdade:
-- os arquivos abertos pela biblioteca io são userdata.
assert(type(io.stdout) == "userdata")

-- Bibliotecas C de terceiros expõem seus próprios userdata
-- (exemplo ilustrativo — "bibliotecaC" não existe de fato):
local bibliotecaC = require("bibliotecaC")

local userdata = bibliotecaC.criarObjeto()

bibliotecaC.destruirObjeto(userdata)

7. thread:

Exemplo:

local thread = coroutine.create(function()
  print("Tarefa em thread")
end)

coroutine.resume(thread)

8. table:

Exemplo:

local tabela = {
  nome = "João Silva",
  idade = 30,
  cidade = "Palhoça"
}

print(tabela["nome"])