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

Mensagem pós-processamento

const rl = require("readline")

const atendimentoCli = rl.createInterface({
    input: process.stdin,
    output: process.stdout,
})

atendimentoCli.question('Inscira o seu nome:\n', (cliNome) => {
    let clNome = cliNome
    atendimentoCli.question("Qual tipo de acesso você tem?\n", (tipAcesso) => {
        let tipAcess = tipAcesso*

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

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

        processarPedido(clNome.toLocaleUpperCase(), tipAcess.toLocaleLowerCase(), mensagemPersonalizada)
        atendimentoCli.close()
    })
})
2 respostas

Olá Estudante misterioso.
Tudo bem?
Parabéns por compartilhar sua solução! Vejo que você compreendeu bem a proposta de utilizar funções e callbacks para realizar um processamento após a coleta dos dados do usuário.
No entanto, há um pequeno erro de sintaxe que impedirá a execução do código:

let tipAcess = tipAcesso*

O caractere * no final da linha não deveria estar aí. O correto seria:

let tipAcess = tipAcesso

Depois dessa correção, a chamada:

processarPedido(
    clNome.toLocaleUpperCase(),
    tipAcess.toLocaleLowerCase(),
    mensagemPersonalizada
)

funcionará conforme esperado.
Algumas observações para deixar o código ainda melhor:

  • Você pode utilizar diretamente os parâmetros recebidos sem criar variáveis intermediárias, caso não precise modificá-los.
  • O método mais utilizado para textos é toUpperCase() e toLowerCase(). Embora toLocaleUpperCase() e toLocaleLowerCase() funcionem, eles são mais úteis quando há necessidades específicas relacionadas à localização e idioma.
  • A estrutura das funções processarPedido e mensagemPersonalizada está organizada e demonstra um bom entendimento do conceito de callback.
    Por exemplo:
processarPedido(
    cliNome.toUpperCase(),
    tipAcesso.toLowerCase(),
    mensagemPersonalizada
);

ficaria mais enxuto e igualmente funcional.
Você está evoluindo bem no entendimento de funções e passagem de parâmetros. Continue praticando esse padrão, pois callbacks são uma base importante para trabalhar com operações assíncronas em JavaScript.
Avise qualquer dúvida.
Bons estudos!
Acho que tem um erro no input com um c a mais : o correto é 'Insira o seu nome:\n'

Uma analise rapida e outras sugestões:
As variáveis clNome e tipAcess são apenas cópias dos parâmetros recebidos e não agregam valor. Você pode utilizar cliNome e tipAcesso diretamente.
Outro ponto é a nomenclatura. Nomes como clNome, cliNome, tipAcess e tipAcesso são muito parecidos entre si e podem dificultar a leitura. Prefira nomes mais claros e consistentes, como nomeCliente e tipoAcesso.
Também vale considerar o uso de toUpperCase() e toLowerCase(), que são os métodos mais comuns para esse tipo de transformação.
Pensando em manutenção por outros desenvolvedores, quanto menos variáveis desnecessárias e mais explícitos forem os nomes, mais fácil será entender rapidamente o fluxo do programa.
No geral, a lógica está correta e a implementação do callback foi feita da forma esperada para a atividade.
Isso é tudo...comenta ai qualquer coisa.
Até...