Menu
Coddy logo textTech

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.

challenge icon

Desafio

Fácil

Crie 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 playerLevel com o valor 25
  • Imprima este playerLevel interno

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 aqui
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Fundamentals