1
resposta

[Sugestão] Para quem não entendeu...

Digamos que a ordem dos decorators seja:

@inspect()
@logarTempoDeExecucao()
// Método original ...

Os decorators serão aplicados na ordem exata em que aparecem, sem confusão! Abstraindo o objetivo de cada um deles, acontecerá o seguinte: o inspect substituirá o método original por uma função que dentro dela cumpre seu objetivo (exibir no console as informação do método) e executa também o método original. O "método original", portanto, agora (após a substituição) é uma função que dentro dela chama o que de fato é o método original (por exemplo, o update).

Agora, seguindo a ordem, será aplicado o logarTempoDeExecucao, não no método update, mas no novo "método original" (a função dada pelo inspect que dentro dela executa o método original). Então, o logarTempoDeExecucao subsitui novamente o "método original" por uma nova função, que, além de cumprir seu objetivo, executa também a função (inspect, com seu objetivo) que dentro dela executa o método original (update).

RESUMINDO: na prática, é excutada uma árvore: o logarTempoDeExecucao chama o inspect, que por sua vez chama o método original. Algo assim:

function logarTempoDeExecucao() {
    // Lógica do logarTempoDeExecucao
    
    function inspect() {
        // Lógica do inspect
        
        function update() {
            // O método da classe
        }
        update();
        
        // Lógica do inspect
    }
    inspect();
    
    // Lógica do logarTempoDeExecucao
}
logarTempoDeExecucao();

E é por isso que no console do professor aparece as informações do inspect e, no meio delas, o tempo de excução. O professor declarou o logarTempoDeExecucao antes do inspect, e dentro do inspect, mandou, nesta ordem: exibir o nome do método, exibir seus parâmetros, executar o método (que nesse caso continha o logarTempoDeExecucao aplicado porque este foi declarado primeiro) e então exibir o retorno.

Na ordem em que eu declarei os decorators, o logarTempoDeExcucao medirá o tempo de execução tanto do update (método original) quanto do inspect (e quaisquer outros decorators declarados antes dele), conforme a árvore acima, o que não necessariamente é o correto, visto que esses decorators não irão para produção (só queremos saber se o update apresenta um bom desempenho para produção).

Espero que tenha te ajudado a entender. Achei as explicações do professor e da tarefa sobre isso bem vagas. Tentei simplificar ao máximo. Abraço!

1 resposta

Oi Tiago, tudo bem?

Agradeço muito por compartilhar essa explicação detalhada sobre a ordem de aplicação de decorators e como isso impacta a execução dos métodos. Sua contribuição é valiosa para outras pessoas que podem ter encontrado desafios semelhantes ou dúvidas sobre esse conceito.

Entender a ordem de execução dos decorators é crucial ao trabalhar com TypeScript e decoradores em JavaScript, e sua explicação, incluindo o exemplo prático, certamente esclarecerá muitas dúvidas para quem estiver seguindo o curso.

Continue participando e compartilhando seus conhecimentos. Estamos aqui para ajudar e aprender juntos. Parabéns por sua dedicação e por contribuir para a comunidade!

Um abraço e bons estudos.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software