Em um caso de callback como esse, qual é a melhor prática: declarar a função callback separadamente ou passar uma arrow function direto na chamada?
Por exemplo, qual abordagem é mais recomendada?
responderUsuario(nome, mostrarResposta);
ou
responderUsuario(nome, (nomeUsuario) => {
console.log(`Pronto, ${nomeUsuario}! Essa é sua resposta!`);
rl.close();
});
Existe alguma diferença relevante entre elas em termos de boas práticas ou isso depende mais do contexto (reutilização, legibilidade etc.)?
Solução do exercício:
import { createInterface } from "readline";
const rl = createInterface({
input: process.stdin,
output: process.stdout,
});
const validarNome = (nome) => {
nome = nome.trim();
const nomeValido = nome.length > 1 && /^[a-zA-ZÀ-ÿ\s'-]+$/.test(nome);
if (!nomeValido) return null;
return nome;
};
const validarPergunta = (pergunta) => {
pergunta = pergunta.trim();
const perguntaValida = pergunta.length >= 2;
if (!perguntaValida) return null;
return pergunta;
};
const responderUsuario = (nome, callback) => {
console.log("Processando sua pergunta...");
setTimeout(() => {
callback(nome);
}, 3000);
};
const mostrarResposta = (nome) => {
console.log(`Olá, ${nome}! Aqui está a resposta para sua dúvida.`);
rl.close();
};
rl.question("Qual seu nome?\n> ", (input) => {
const nome = validarNome(input);
if (nome === null) {
console.log("Nome inválido");
rl.close();
return;
}
rl.question("Faça sua pergunta.\n> ", (input) => {
const pergunta = validarPergunta(input);
if (pergunta === null) {
console.log("Pergunta inválida");
rl.close();
return;
}
responderUsuario(nome, mostrarResposta);
});
});