0Pricing
Lua Academy · Aula

O que são upvalues?

Compreenda como os fechamentos capturam variáveis como upvalues de escopos externos.

O que são upvalues? é uma aula grátis de Lua Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Lua Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Lua Academy inclui 4 aulas no total.

Recapitulação sobre Fechamentos

Um fechamento é uma função acompanhada de referências a variáveis do escopo que a envolve. Essas variáveis capturadas são chamadas de upvalues.

Exemplo de Upvalue

A função interna captura count do escopo da função externa.

local function makeCounter()
  local count = 0
  return function()
    count = count + 1
    return count
  end
end
local next = makeCounter()
print(next())  -- 1
print(next())  -- 2

Variáveis externas são variáveis vivas

As variáveis externas não são cópias — são referências à variável. O fechamento pode tanto lê-las quanto alterá-las.

Várias variáveis externas

Um fechamento pode capturar várias variáveis de vários escopos abrangentes.

local function adder(x)
  return function(y) return x + y end
end
local add5 = adder(5)
print(add5(3))  -- 8

Tempo de vida das variáveis externas

As variáveis externas permanecem vivas enquanto qualquer fechamento que faça referência a elas estiver vivo. Elas só são coletadas pelo coletor de lixo quando todos os fechamentos que fazem referência a elas forem coletados.

debug.getupvalue

É possível inspecionar variáveis externas com debug.getupvalue(fn, n), que retorna o nome e o valor da n-ésima variável externa.

local x = 10
local function f() return x end
print(debug.getupvalue(f, 1))  -- x  10

Variável externa vs. global

As variáveis externas (variáveis locais capturadas por fechamentos) são mais rápidas que as globais. A VM as acessa diretamente por índice, sem consultar uma tabela.

Variável externa fechada

Quando o bloco abrangente termina, a variável externa é fechada: ela é movida da pilha para o heap. O fechamento continua compartilhando essa célula no heap.

Variáveis externas abertas vs. fechadas

Aberta: a variável externa ainda está na pilha (a função abrangente ainda está em execução). Fechada: a variável externa foi migrada para o heap quando o escopo abrangente terminou.

Caso de uso prático

As variáveis externas implementam naturalmente um estado privado em fechamentos — uma função de módulo pode manter um estado privado sem expô-lo globalmente.

local id = 0
local function newId()
  id = id + 1
  return id
end

Limite de variáveis externas

Cada função Lua pode fazer referência a até 255 variáveis externas. Isso raramente é uma preocupação na prática.

Pergunta sobre variáveis externas

O que é uma variável externa?

Recapitulação: variáveis externas

Variáveis externas são as variáveis externas capturadas pelo fechamento. Elas persistem no heap depois que o escopo abrangente termina, são compartilhadas por referência e fornecem um estado privado mutável sem variáveis globais.

Perguntas Frequentes

A aula “O que são upvalues?” é grátis?

Sim — o texto completo de “O que são upvalues?” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Lua Academy, atualize para CoddyKit PRO. O curso de Lua Academy inclui 4 aulas no total.

O que vou aprender em “O que são upvalues?”?

Compreenda como os fechamentos capturam variáveis como upvalues de escopos externos. Você pratica Lua Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Lua Academy?

Nenhuma experiência prévia é necessária. Lua Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “O que são upvalues?”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Lua Academy?

Sim. Cada aula de Lua Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. O que são upvalues?
  2. Upvalues compartilhados entre fechamentos
  3. Funções fábrica e geradores
  4. Memoização com fechamentos
← Voltar para Lua Academy