Variáveis
Aula anterior, caso não tenha lido.
Palavras e caracteres reservados que será usado nessa aula:
= { } ( ) function return end local do
Variável nada mais é do que um espaço na memoria que aloca um dado (informação) e contem um nome como identificador (ponteiro) para essa informação.
Lua é uma linguagem dinamicamente tipada e, portanto tu não precisa declarar de que tipo se trata aquele determinado dado.
Lua também é uma linguagem sensível a maiúsculas e minúsculas, portanto existe diferença entre a palavra oi e a palavra Oi (com o “o” maiúsculo).
Como se cria uma variável?
Basicamente declarando uma palavra que seja alfanumérica.
Nomedavariavel
Nomedavariavel2689
umNomeQualquer
Agora que criamos a variável, o que podemos fazer com ela?
Vamos atribuir valores a ela de todo tipo.
E como se atribui valores a ela?
Com o caractere de atribuição; veja:
Nomedavariavel = “essa variável contem esse texto”
number = 546789
tabela = {} -- uma tabela vazia
bool = true -- boolean
digaoi = function() return ‘oi’ end -- outro modo de declarar uma função.
Como eu pego esses valores declarados em variáveis?
Usando o nome que foi declarado pra ele.
Lembre-se que lua diferencia letras maiúsculas de letras minúsculas.
Usando como exemplo as palavras que usei para criar as variáveis acima sendo chamado pela função print:
Nomedavariavel = “essa variável contem esse texto”
print(Nomedavariavel) >> essa variável contem esse texto
print(nomedavariavel) >> nil -- a saída é nula devido a variável não existir; lembre-se que lua diferencia maiúscula de minúscula.
number = 546789
print(number) >> 546789
print(Number) >> nil -- idem.
digaoi = function() return ‘oi’ end
print(digaoi()) >> oi
print(DigaOi()) >> nil
Tu poderás declarar as variáveis uma pós outra; esse recurso não serve somente para diminuir as linhas do código e torna-lo mais legível, mas também é usado como um recurso para pegar múltiplos valores retornados por funções.
Exemplo:
function multiplosRetorno()
return 1,”retorno”, {texto = “não se imprime tabelas”}
end
Para que eu tenha acesso aos dados retornados por tal função, eu teria que atribuir uma variável para cada retorno; dessa forma:
numero, string, tab = multiplosRetorno()
Associando a função as variáveis, eu consigo pegar todos os dados retornados por ela.
print(numero) >> 1
print(string) >> retorno
print(tab.texto) >> não se imprime tabelas
Uma pratica comum em programação é anular um dado desnecessário que fora retornado; usando o caractere underline (linha baixa).
numero, _, tab = multiplosRetorno() -- underline impossibilitando de pegar o valor retornado naquela posição pela função.
Lua dispõe de uma forma própria de operador ternário, que consiste em fazer uma comparação logica na qual se for verdadeiro ele assume o valor atribuído/direcionado pela palavra and ou, caso seja falsa a condição, assume o valor atribuído/direcionado pela palavra or.
condição == logica and valor caso seja verdadeiro or valor caso seja falso
getPlayerLevel(cid) >= 100 and “welcome to hell!!!” or “noob”
Como Lua é uma linguagem dinamicamente tipada, tu poderás mudar o tipo de dado atribuído a variável a qualquer momento.
dado = true
if(type(dado) == "boolean" )then dado = "string" end
print(type(dado)) >> "string"
dado = type(dado) == "string" and 123 or type(dado) -- Forma do operador ternário usado por lua
print(type(dado)) >> "number"
dado = {str = "string"}
print(type(dado)) >> "table"
Vamos explicar um pouco sobre a palavra reservada “local”.
Ao declararmos uma variável, ela assume uma posição global, mas caso não se faça necessário ou não seja permitido que isso ocorra, faz-se do uso da palavra “local” para que aquela variável seja visível apenas naquele bloco e nada mais.
do -- criando um bloco
var = "variavel global"
end
print(var) >> variavel global
Veja que a variável “var” que foi declarada dentro de um bloco ficou visível fora dele, pois se trata de uma variável global, portanto visível para todos; Se tivesse sido declarado à palavra “local” na variável, ela ficaria visível apenas para o bloco e nada mais.
Agora veja esse caso:
var = "variavel global"
do -- criando um bloco
local var = "variavel local"
print(var) >> variavel local
var = "variavel alterada" -- alterando o texto da variável “var”
print(var) >> variavel alterada
end
print(var) >> variavel global
Veja que eu declarei uma variável local dentro de um bloco com o mesmo nome da variável global. A variável local sofreu alterações de texto, só que a variável global não, mesmo tendo o mesmo nome.
Isso se deu devido a que, quando se declara uma variável local, ela só é valida para aquele bloco, todo e qualquer alteração, só valera para ela, não afetando nada externamente.
Agora adicionem em seus códigos variáveis tanto locais quanto globais e atribua a elas valores de vários tipos.
Inté a próxima aula.