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!

2
respostas

Resolução

function processarPedido(nome, tipoCliente, callback) {
    console.log(`Processando pedido para ${nome}...`);
    // Simular processamento do pedido
    setTimeout(() => {
        callback(nome, tipoCliente);
    }, 1000);
}

function exibirMensagemSucesso(nome, tipoCliente) {
    console.log(`Obrigado pela preferência, ${nome} Você ganhou frete grátis!`);
}

function exibirMensagemBemVinda(nome, tipoCliente) {
    console.log(`Bem-vinda, ${nome}!  Aproveite um cupom de boas-vindas.`);
}

function exibirMensagemObrigado(nome, tipoCliente) {
    console.log(`Obrigado pela sua compra,${nome}! `);
}

processarPedido("Lucas", "vip", exibirMensagemSucesso);
processarPedido("Fernanda", "novo", exibirMensagemBemVinda);
processarPedido("João", "comum", exibirMensagemObrigado);

// OU teria uma segunda forma

function processarPedido(nome, tipoCliente, callback) {
    console.log(`Processando pedido para ${nome}...`);
    callback(nome, tipoCliente);
}

function mensagemPersonalizada(nome, tipoCliente) {
    if (tipoCliente === "vip") {
        console.log(`Obrigado pela preferência, ${nome} Você ganhou frete grátis!`);
    } else if (tipoCliente === "novo") {
        console.log(`Bem-vinda, ${nome}!  Aproveite um cupom de boas-vindas.`);
    } else {
        console.log(`Obrigado pela sua compra,${nome}! `);
    }
}

processarPedido("Lucas", "vip", mensagemPersonalizada);
processarPedido("Fernanda", "novo", mensagemPersonalizada);
processarPedido("João", "comum", mensagemPersonalizada);
2 respostas

Oii Alan, tudo bem?

Obrigada por compartilhar suas duas soluções aqui no fórum! É muito interessante ver você explorar abordagens diferentes para o mesmo problema.

As duas funcionam corretamente, e você tocou em um ponto importante do design com callbacks: a primeira abordagem passa uma função específica para cada tipo de cliente, enquanto a segunda centraliza toda a lógica de decisão dentro de uma única função. Ambas são válidas, mas em projetos maiores a segunda costuma ser mais fácil de manter, já que as mensagens ficam em um único lugar para editar.

Uma observação pequena: nas funções da primeira abordagem você declarou o parâmetro tipoCliente, mas não o usa dentro delas. Não chega a ser um erro, porém vale remover parâmetros que não têm função para deixar o código mais limpo.

Já que você explorou callbacks, pode ser interessante ver como async/await resolve situações onde os callbacks começam a se aninhar demais:

Conte com a Alura para evoluir seus estudos. Em caso de dúvidas, fico à disposição.

Bons estudos!

Sucesso

Imagem da comunidade

Compreendo Victor muito obrigado pelo feedback