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.