1
resposta

Mensagem pós-processamento

function processarPedido(nome, tipo, mensagemPersonalizada) {
    console.log(`processando pedido de ${nome}...`)
    mensagemPersonalizada(nome, tipo);
}

function mensagemPersonalizada(nome, tipo) {
    switch (tipo) {
        case 'vip' :
            console.log(`Obrigado pela preferência, ${nome}! Você ganhou frete grátis.`);
            break;
        case 'novo' :
            console.log(`Bem-vindo(a), ${nome}! Aproveite um cupom de boas-vindas.`);
            break;
        case 'comum' :
            console.log(`Obrigado pela sua compra, ${nome}!`);
            break;
        default :
        console.log('tipo invalido');
        break;
    }
}

processarPedido('Kauê', 'vip', mensagemPersonalizada);
1 resposta

Olá, Kauê. Como vai?

Excelente implementação! O seu código demonstra perfeitamente o conceito de Callback, que é quando passamos uma função como argumento para outra função para que ela seja executada em um momento posterior.

Você estruturou muito bem a lógica utilizando o switch para tratar cada tipo de cliente de forma isolada, deixando o código limpo e de fácil leitura.

Como boa prática e para complementar o seu aprendizado sobre funções no JavaScript, vale destacar uma pequena melhoria de arquitetura. Atualmente, a sua função principal processarPedido depende do nome exato da função de callback externa (mensagemPersonalizada) no momento em que recebe os parâmetros:

function processarPedido(nome, tipo, mensagemPersonalizada) {
    console.log(`processando pedido de ${nome}...`)
    mensagemPersonalizada(nome, tipo); // Aqui você usou o nome fixo
}

O ideal ao trabalhar com callbacks é utilizar o nome do próprio parâmetro que você definiu na assinatura da função. Desse modo, o seu código ganha muito mais flexibilidade, permitindo que você passe qualquer outra função de mensagem no futuro sem precisar alterar a estrutura interna de processarPedido.

Veja o ajuste aplicando essa flexibilidade e uma correção na indentação do default:

function processarPedido(nome, tipo, callback) {
    console.log(`processando pedido de ${nome}...`);
    // Chamamos a função usando o nome do parâmetro "callback"
    callback(nome, tipo); 
}

function exibirMensagemCliente(nome, tipo) {
    switch (tipo) {
        case 'vip':
            console.log(`Obrigado pela preferência, ${nome}! Você ganhou frete grátis.`);
            break;
        case 'novo':
            console.log(`Bem-vindo(a), ${nome}! Aproveite um cupom de boas-vindas.`);
            break;
        case 'comum':
            console.log(`Obrigado pela sua compra, ${nome}!`);
            break;
        default:
            console.log('Tipo inválido');
            break;
    }
}

// Executando com a nova nomenclatura
processarPedido('Kauê', 'vip', exibirMensagemCliente);

Dessa forma, se amanhã você criar uma função chamada enviarEmailDeCancelamento(nome, tipo), você poderá passá-la dentro de processarPedido normalmente, tornando seu código muito mais reutilizável. Parabéns pelo ótimo resultado no exercício!

Espero que possa ter lhe ajudado!