Você está na página 1de 2

2.4.

2 - Blocos
Um bloco uma lista de comandos; sintaticamente, um bloco a mesma coisa que um tr
echo:
bloco ::= trecho
Um bloco pode ser explicitamente delimitado para produzir um nico comando:
comando ::= do bloco end

Blocos explcitos so teis para controlar o escopo de declaraes de variveis. Blocos expl
itos so tambm usados s vezes para adicionar um comando return ou break no meio de o
utro bloco (ver 2.4.4).
2.4.3 - Atribuio
Lua permite atribuies mltiplas. Em virtude disto, a sintaxe para atribuio define uma
lista de variveis no lado esquerdo e uma lista de expresses no lado direito. Os el
ementos em ambos os lados so separados por vrgulas:
comando ::= listavar `= listaexp
listavar ::= var {`, var}
listaexp ::= exp {`, exp}
Expresses so discutidas em 2.5.
Antes da atribuio ser realizada, a lista de valores ajustada para o comprimento da
lista de variveis. Se h mais valores do que o necessrio, os valores em excesso so d
escartados. Se h menos valores do que o necessrio, a lista estendida com tantos ni
l's quantos sejam necessrios. Se a lista de expresses termina com uma chamada de f
uno, ento todos os valores retornados por esta chamada entram na lista de valores,
antes do ajuste ser realizado (exceto quando a chamada delimitada por parnteses;
veja 2.5).
Um comando de atribuio primeiro avalia todas as suas expresses e somente depois que
a atribuio realizada. Desta forma, o cdigo
i = 3
i, a[i] = i+1, 20
atribui 20 a a[3], sem afetar a[4] porque o i em a[i] avaliado (para 3) antes de
receber o valor 4. De modo similar, a linha
x, y = y, x
troca os valores de x e y e
x, y, z = y, z, x
permuta de maneira cclica os valores de x, y e z.
A semntica de atribuies para variveis globais e campos de tabelas pode ser mudada at
ravs do uso de metatabelas. Uma atribuio para uma varivel indexada t[i] = val equiva
lente a settable_event(t,i,val). (Veja 2.8 para uma descrio completa da funo settable
_event. Esta funo no definida nem pode ser chamada em Lua. Ela foi usada aqui somen
te para fins didticos.)

Uma atribuio a uma varivel global x = val equivalente atribuio _env.x = val, que por
sua vez equivalente a

settable_event(_env, "x", val)


onde _env o ambiente da funo sendo executada. (A varivel _env no definida em Lua. El
a foi usada aqui somente para fins didticos.)
2.4.4 - Estruturas de Controle
As estruturas de controle if, while e repeat possuem o significado usual e a sin
taxe familiar:
comando ::= while exp do bloco end
comando ::= repeat bloco until exp
comando ::= if exp then bloco {elseif exp then bloco} [else bloco] end
Lua tambm possui um comando for, o qual possui duas variaes (ver 2.4.5).
A expresso da condio de uma estrutura de controle pode retornar qualquer valor. Tan
to false como nil so considerados um valor falso. Todos os valores diferentes de
nil e false so considerados como verdadeiros (em particular, o nmero 0 e a cadeia
de caracteres vazia tambm so considerados valores verdadeiros).
No lao repeatuntil, o bloco mais interno no termina na palavra-chave until, mas som
ente depois da condio. Desta forma, a condio pode referenciar variveis locais declara
das dentro do bloco do lao.
O comando return usado para retornar valores de uma funo ou de um trecho (que nada
mais do que uma funo). Funes e trechos podem retornar mais de um valor, de modo que
a sintaxe para o comando return
comando ::= return [listaexp]
O comando break usado para terminar a execuo de um lao while, repeat ou for, puland
o para o prximo comando depois do lao:
comando ::= break
Um break termina a execuo do lao mais interno.

Você também pode gostar