Lua - Variáveis
Uma variável nada mais é que um nome dado a uma área de armazenamento que nossos programas podem manipular. Ele pode conter diferentes tipos de valores, incluindo funções e tabelas.
O nome de uma variável pode ser composto de letras, dígitos e o caractere de sublinhado. Deve começar com uma letra ou um sublinhado. Letras maiúsculas e minúsculas são distintas porque Lua faz distinção entre maiúsculas e minúsculas. Existem oito tipos básicos de valores em Lua -
Em Lua, embora não tenhamos tipos de dados variáveis, temos três tipos baseados no escopo da variável.
Global variables - Todas as variáveis são consideradas globais, a menos que sejam explicitamente declaradas como locais.
Local variables - Quando o tipo é especificado como local para uma variável, seu escopo é limitado com as funções dentro de seu escopo.
Table fields - Este é um tipo especial de variável que pode conter qualquer coisa, exceto nada, incluindo funções.
Definição de Variável em Lua
Uma definição de variável significa dizer ao interpretador onde e quanto criar o armazenamento para a variável. Uma definição de variável tem um tipo opcional e contém uma lista de uma ou mais variáveis desse tipo da seguinte forma -
type variable_list;
Aqui, type é opcionalmente local ou tipo especificado tornando-o global, e variable_listpode consistir em um ou mais nomes de identificadores separados por vírgulas. Algumas declarações válidas são mostradas aqui -
local i, j
local i
local a,c
A linha local i, jambos declaram e definem as variáveis i e j; que instrui o interpretador a criar variáveis chamadas i, j e limita o escopo a ser local.
As variáveis podem ser inicializadas (atribuídas a um valor inicial) em sua declaração. O inicializador consiste em um sinal de igual seguido por uma expressão constante como segue -
type variable_list = value_list;
Alguns exemplos são -
local d , f = 5 ,10 --declaration of d and f as local variables.
d , f = 5, 10; --declaration of d and f as global variables.
d, f = 10 --[[declaration of d and f as global variables.
Here value of f is nil --]]
Para definição sem um inicializador: variáveis com duração de armazenamento estático são inicializadas implicitamente com nil.
Declaração de variável em Lua
Como você pode ver nos exemplos acima, as atribuições para variáveis múltiplas seguem um formato lista_variável e lista_valor. No exemplo acimalocal d, f = 5,10 temos d e f na lista_variável e 5 e 10 na lista de valores.
A atribuição de valor em Lua ocorre como a primeira variável na lista_variável com o primeiro valor na lista_valor e assim por diante. Portanto, o valor de d é 5 e o valor de f é 10.
Exemplo
Tente o exemplo a seguir, onde as variáveis foram declaradas no topo, mas foram definidas e inicializadas dentro da função principal -
-- Variable definition:
local a, b
-- Initialization
a = 10
b = 30
print("value of a:", a)
print("value of b:", b)
-- Swapping of variables
b, a = a, b
print("value of a:", a)
print("value of b:", b)
f = 70.0/3.0
print("value of f", f)
Quando o código acima é construído e executado, ele produz o seguinte resultado -
value of a: 10
value of b: 30
value of a: 30
value of b: 10
value of f 23.333333333333
Lvalues e Rvalues na Lua
Existem dois tipos de expressões em Lua -
lvalue- As expressões que se referem a um local da memória são chamadas de expressão "lvalue". Um lvalue pode aparecer como o lado esquerdo ou direito de uma atribuição.
rvalue- O termo rvalue refere-se a um valor de dados que é armazenado em algum endereço da memória. Um rvalue é uma expressão que não pode ter um valor atribuído a ela, o que significa que um rvalue pode aparecer no lado direito, mas não no lado esquerdo de uma atribuição.
As variáveis são lvalues e, portanto, podem aparecer no lado esquerdo de uma atribuição. Literais numéricos são rvalues e, portanto, não podem ser atribuídos e não podem aparecer no lado esquerdo. A seguir está uma declaração válida -
g = 20
Mas a seguir não é uma declaração válida e geraria um erro de tempo de construção -
10 = 20
Na linguagem de programação Lua, além dos tipos de atribuição acima, é possível ter vários lvalues e rvalues no mesmo comando. É mostrado abaixo.
g,l = 20,30
Na declaração acima, 20 é atribuído a ge 30 é atribuído a l.