Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

Gerador de Funções Personalizadas: Closure

Nesta atividade, estou aprendendo o conceito de closure, que ocorre quando uma função cria outra função e esta segunda função "lembra" das informações recebidas pela primeira.

O conceito central é:

Criar uma regra
↓
Guardar essa regra
↓
Aplicar a regra várias vezes

A grande novidade é que a função interna continua lembrando de uma informação mesmo depois que a função externa terminou sua execução.


Solução da atividade da Alura

def criar_desconto(porcentagem):

    def calcular_preco(valor):

        return valor - (valor * (porcentagem / 100))

    return calcular_preco


desconto = float(input("Digite a porcentagem de desconto: "))

calcular_preco_final = criar_desconto(desconto)

valor = float(input("Digite o valor da compra: "))

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

Exemplo:

Entrada:

Desconto: 10%

Compra: 200

Resultado:

Preço final com desconto: 180,0

O que realmente está sendo ensinado?

Mais do que calcular descontos, estamos aprendendo a criar funções especializadas que guardam uma regra para uso futuro.

No exemplo:

Regra criada:
10% de desconto

A função passa a lembrar dessa regra.


Aplicação na Plataforma AFA

Esse conceito é extremamente interessante para o AFA porque muitas regras pedagógicas são definidas uma única vez e depois aplicadas para centenas de estudantes.

Por exemplo:

Regra da Nota Inicial AFA

Todos os estudantes iniciam o trimestre com nota 8,0.

Podemos criar uma função que já "lembra" dessa regra.

def criar_calculadora_afa(nota_inicial):

    def calcular_nota(registros):
        return min(nota_inicial + registros, 10.0)

    return calcular_nota

Criando a regra:

calcular_afa = criar_calculadora_afa(8.0)

Agora ela ficará armazenada.


Aplicação em um estudante

saldo_formativo = 1.5

nota = calcular_afa(saldo_formativo)

print(nota)

Resultado:

9.5

A função continua lembrando que a nota inicial é 8,0.


Aplicação para uma Rede Educacional

Imagine que estamos implementando o AFA em uma rede de escolas.

Cada escola pode trabalhar com uma nota-base diferente.

Escola A → nota inicial 8,0

Escola B → nota inicial 7,5

Escola C → nota inicial 8,5

Podemos criar calculadoras específicas para cada unidade.

calculadora_escola_a = criar_calculadora_afa(8.0)

calculadora_escola_b = criar_calculadora_afa(7.5)

calculadora_escola_c = criar_calculadora_afa(8.5)

Cada uma guarda sua própria regra institucional.


Aplicação na futura média trimestral

Também podemos criar uma calculadora específica para cada professor.

Por exemplo:

Professor A trabalha com:

4 atividades contínuas
+
1 nota AFA

Professor B trabalha com:

8 atividades contínuas
+
1 nota AFA

Podemos criar funções que guardam essa estrutura.

def criar_calculo_media(quantidade_componentes):

    def calcular_media(soma_notas):
        return soma_notas / quantidade_componentes

    return calcular_media

Exemplo:

media_professor_a = criar_calculo_media(5)

media_professor_b = criar_calculo_media(9)

Cada função passa a lembrar quantos componentes compõem a média daquele professor.


O que realmente aprendi?

Na atividade da Alura:

Desconto
↓
Função guarda a porcentagem
↓
Aplica o desconto

Na Plataforma AFA:

Regra pedagógica
↓
Função guarda a regra
↓
Aplica a regra automaticamente

Percebi que o principal aprendizado desta atividade foi compreender que sistemas não precisam recalcular ou redefinir regras o tempo todo. Com closures, é possível criar funções especializadas que guardam parâmetros institucionais importantes e os reutilizam automaticamente. No contexto da Plataforma AFA, isso poderá ser utilizado para armazenar regras de cálculo, critérios de avaliação, notas-base, indicadores e parâmetros específicos de cada escola ou componente curricular.

1 resposta

Oi, Patricia. Tudo bem com você?

Gostei da forma como você relacionou o conceito de closure com situações práticas além do exercício de cupons de desconto. Sua explicação sobre a função interna "lembrar" das informações recebidas pela função externa está correta e captura exatamente a essência desse recurso em Python. A solução apresentada para a atividade atende ao objetivo proposto, utilizando uma closure para armazenar a porcentagem de desconto e reutilizá-la posteriormente no cálculo do preço final.

Os exemplos que você trouxe ajudam a demonstrar como closures podem ser úteis para encapsular regras de negócio e evitar a repetição de parâmetros em diferentes partes de um sistema. As analogias com regras pedagógicas, notas-base e critérios específicos também seguem a lógica do conceito estudado. Esse tipo de associação costuma facilitar bastante a compreensão de temas que, inicialmente, podem parecer abstratos.

Um exemplo semelhante ao exercício seria criar uma função especializada para aplicar 15% de desconto. Após sua criação, ela poderia ser reutilizada para calcular o valor final de várias compras sem que a porcentagem precisasse ser informada novamente, pois o valor já estaria preservado no escopo da closure.

Ao explorar esse conceito, você consegue identificar situações em que uma closure seria mais vantajosa do que utilizar variáveis globais ou passar parâmetros repetidamente entre funções?

Parabéns pela análise detalhada e por compartilhar suas reflexões com a comunidade. Esse tipo de aprofundamento contribui bastante para o aprendizado coletivo. O fórum está à disposição para novas discussões e dúvidas que surgirem ao longo dos estudos.

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