1
resposta

[Projeto] Resposta

Como estruturar uma Closure no código?
Para criar uma closure, sempre precisará de:

  • Uma função mãe (externa).
  • Uma função filha (interna) dentro dela.
  • A função mãe precisa dar um return na função filha (sem os parênteses, apenas o nome dela!).

Olha como fica a estrutura para o sistema do Miguel:

# Esta é a função externa
def criar_calculadora_desconto(porcentagem):
  # Esta é a função interna
  def aplicar_desconto(valor_compra):
    # Ela tem acesso à 'porcentagem' que veio lá de fora!
    desconto = valor_compra * (porcentagem / 100)
    return valor_compra - desconto

  return aplicar_desconto

Como usar isso no programa principal?
É aqui que a mágica acontece. Quando chamamos a função de fora, ela cria a nossa closure. Veja o programa completo com as entradas do usuário:

porcentagem_user = float(input("Digite a porcentagem de desconto: "))
valor_user = float(input("Digite o valor da compra: "))

meu_cupom = criar_calculadora_desconto(porcentagem_user)
preco_final = meu_cupom(valor_user)

print(f"Preço final com desconto: {preco_final}")

Por que isso é útil na Ciência da Computação?
Imagine que o Miguel queira criar um cupom fixo de Black Friday ($30%$) e outro de Cliente VIP ($15%$). Com a closure, ele pode criar várias funções personalizadas sem ter que reescrever o código da conta matemática toda vez:

cupom_black_friday = criar_calculadora_desconto(30)
cupom_vip = criar_calculadora_desconto(15)

print(cupom_black_friday(1000))
print(cupom_vip(1000))
1 resposta

Olá, Maria! Como vai?

Agradeço por compartilhar.

Sua explicação sobre closure ficou muito clara, principalmente ao separar a função externa, a função interna e o return da função filha sem parênteses. O exemplo do desconto ajuda bastante a visualizar como a função interna continua tendo acesso à variável porcentagem, mesmo depois que a função externa já foi executada.

Uma dica interessante é testar diferentes cupons, como você fez com cupom_black_friday e cupom_vip, porque isso mostra bem a vantagem da closure: criar funções personalizadas sem repetir a mesma lógica. Em quais outros casos você acha que uma closure poderia ajudar a reaproveitar regras no código?

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!