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!

0
respostas

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.