Olá, Matheus! Como vai?
É muito bacana ver você testando os limites do código e tentando entender a mecânica por trás das funções. Essa dúvida sobre como o return e o console.log se comportam juntos é um clássico, e clarear isso vai te dar um superpoder na programação.
Olhando para o seu exemplo, você pegou bem o espírito da coisa, mas houve um pequeno tropeço na sintaxe e uma confusão conceitual que vamos desatar agora mesmo.
No seu código, você escreveu console.log(nome1(corno));. O JavaScript vai tentar buscar uma variável chamada corno e, como ela não foi declarada, o código vai estourar um erro (ReferenceError). Se a intenção era passar a variável nome que você capturou no prompt, a chamada correta deveria ser nome1(nome).
Dito isso, vamos entender o porquê de parecer confuso usar o console.log junto com o return:
O que é o console.log?
Pense nele como uma impressora. A única função dele é pegar um dado e "printar" (exibir) na tela do console para você, desenvolvedor, ver o que está acontecendo. Ele não guarda informação, não envia dados para lugar nenhum e não altera o fluxo do programa. É só um visualizador.
O que é o return?
Pense nele como o entregador. A função do return é pegar o resultado que foi calculado dentro da função e mandar de volta para o ponto exato onde a função foi chamada no seu script. Quando a função encontra o return, ela para de executar na hora e "cospe" aquele valor para fora.
Analisando o seu teste
Veja o que acontece quando você faz isso:
let nome = prompt('Digite seu nome');
function nome1(nome) {
console.log(`Olá ${nome}, seja muito bem-vindo`); // Impressora 1
return `Olá ${nome}, seja muito bem-vindo`; // Entregador
}
console.log(nome1(nome)); // Impressora 2 recebendo a encomenda
Se você rodar esse código exatamente assim (corrigindo a variável para nome), a mensagem vai aparecer duas vezes no console! Por quê?
- A primeira vez: Acontece quando o código entra na função e executa a "Impressora 1" (
console.log de dentro). - A segunda vez: Acontece porque a função terminou e o
return entregou o texto para fora. Como você colocou a chamada da função dentro de outro console.log ("Impressora 2"), ele imprime o texto que o entregador trouxe.
Qual é a utilidade real do return então?
Geralmente, nós não usamos o return para entregar um texto que só vai direto para o console. Nós usamos o return para guardar o resultado em variáveis e tomar decisões no sistema mais tarde.
Veja este exemplo prático de um e-commerce:
function verificarMaioridade(idade) {
if (idade >= 18) {
return true; // Retorna o valor booleano verdadeiro
} else {
return false; // Retorna o valor booleano falso
}
}
// O sistema chama a função e guarda a "encomenda" (true ou false) na variável
let podeComprarBebidaAlcoolica = verificarMaioridade(20);
// Agora o sistema toma uma decisão com base no que a função retornou
if (podeComprarBebidaAlcoolica) {
exibirBotaoDeCompra();
} else {
bloquearAcesso();
}
Reparou? Nesse cenário real, não houve nenhum console.log dentro da função. Ela apenas processou o dado e devolveu uma resposta (true ou false) para o restante do programa usar.
Ficou mais claro por que o return e o console.log são ferramentas com objetivos totalmente diferentes?