Escopo e Blocos
Parte da seção Fundamentals do Journey de Lua da Coddy — lição 86 de 90.
Em Lua, você pode criar novos escopos em qualquer lugar do seu código usando blocos do...end. Esses blocos permitem que você controle exatamente onde suas variáveis locais podem ser acessadas, oferecendo um controle preciso sobre o escopo das variáveis.
Veja como você pode criar um novo escopo com um bloco do...end:
local outerVar = "I'm outside"
do
local innerVar = "I'm inside"
print(outerVar) -- Isso funciona
print(innerVar) -- Isso também funciona
end
print(outerVar) -- Isso funciona
print(innerVar) -- Isso causaria um erro!O aspecto poderoso do escopo é que você pode ter variáveis locais com o mesmo nome em blocos diferentes, e elas permanecem completamente separadas:
local name = "Alice"
do
local name = "Bob" -- Variável diferente!
print(name) -- Imprime "Bob"
end
print(name) -- Imprime "Alice"Cada bloco do...end cria seu próprio ambiente isolado para variáveis locais. Variáveis declaradas dentro de um bloco não podem escapar para o escopo externo, enquanto variáveis de escopos externos podem ser acessadas de dentro de blocos internos.
Desafio
FácilCrie blocos do...end aninhados para demonstrar como variáveis locais com o mesmo nome permanecem completamente separadas em escopos diferentes.
Primeiro, crie uma variável local chamada playerLevel com o valor 10 no escopo externo e imprima-a.
Depois, crie um bloco do...end e, dentro dele:
- Declare uma nova variável local também chamada
playerLevelcom o valor25 - Imprima este
playerLevelinterno
Após o término do bloco interno, imprima o playerLevel externo novamente para mostrar que ele permaneceu inalterado.
Isso demonstra que variáveis locais com nomes idênticos em escopos diferentes são completamente independentes — a variável interna não afeta a externa.
Folha de consulta
Crie novos escopos em qualquer lugar do seu código usando blocos do...end para controlar o escopo das variáveis:
local outerVar = "I'm outside"
do
local innerVar = "I'm inside"
print(outerVar) -- Isso funciona
print(innerVar) -- Isso também funciona
end
print(outerVar) -- Isso funciona
print(innerVar) -- Isso causaria um erro!Variáveis locais com o mesmo nome em blocos diferentes permanecem completamente separadas:
local name = "Alice"
do
local name = "Bob" -- Variável diferente!
print(name) -- Imprime "Bob"
end
print(name) -- Imprime "Alice"Variáveis declaradas dentro de um bloco não podem escapar para o escopo externo, enquanto variáveis de escopos externos podem ser acessadas de dentro de blocos internos.
Experimente você mesmo
-- TODO: Escreva seu código aquiEsta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Fundamentals
4Operadores 2 Relacionais e Lógicos
Operadores de IgualdadeOperadores RelacionaisO Operador 'and'O Operador 'or'O Operador 'not'Avaliação de Curto-CircuitoValores Truthy e FalsyRecapitulação - Lógica Simples7Lógica Condicional Básica
A instrução if-thenA instrução if-then-elseA instrução elseifRecapitulação - Baú do Tesouro2Variáveis e Tipos de Dados
O que é uma Variável?NúmerosStringsBooleanosO Valor 'nil'A Função type()Convenções de NomenclaturaRecapitulação - Perfil de Personagem5Saída Básica
Imprimindo LiteraisImprimindo VariáveisImprimindo Múltiplos ValoresCombinando Strings e VariáveisA Função tostring()EntradaCastRecapitulação - Relatório de StatusRecapitulação - Até 1208Fundamentos de Manipulação de Strings
string.len()string.upper & string.lowerstring.sub()string.rep()string.find()Revisão - Formatar Nome de Usuário11Tabelas 2: Estilo Dicionário
Pares Chave-ValorCriando Tabelas Estilo DicionárioAcessando - Notação de ColchetesAcessando com Notação de PontoAdicionando e Modificando ParesRemovendo Pares com nilRecapitulação - Propriedades de Itens14Escopo de Variáveis
Variáveis GlobaisVariáveis LocaisPor que usar variáveis locais?Escopo e BlocosRecapitulação - Desafio de Escopo3Operadores 1: Aritmética e Concatenação
Operadores AritméticosOperador de MóduloOperador de ExponenciaçãoConcatenação de StringsPrecedência de OperadoresRecapitulação - Cálculos Simples6Projeto: Exibição de Atributos do Personagem
Mensagem de Boas-vindasDeclarar Atributos do Personagem9Fundamentos de Funções
Declarando uma FunçãoChamando uma FunçãoFunções com ParâmetrosFunções com Múltiplos ParâmetrosA Instrução 'return'Recapitulação - Calculadora de Área