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!

3
respostas

Resposta e dúvida

EXERCICIO 1

let olaMundo = ('Olá Mundo');

function helloWord() {
    console.log(olaMundo);
}
helloWord()

EXERCICIO 2

let nome = prompt('Digite seu nome');

function name() {
    console.log(`Olá ${nome} seja muito bem-vindo`);
}
name()

EXERCICIO 3

let dobro = prompt('Digite seu número')

function dobre() {
    console.log(dobro * 2)
}
dobre() 

EXERCICIO 4

let num1 = Number(prompt('Digite o primeiro número'))
let num2 = Number(prompt('Digite o segundo número'))
let num3 = Number(prompt('Digite o terciero número'))

function media() {
    console.log(((num1 + num2 + num3) / 3).toFixed(0))
}
media()

EXERCICIO 5

let num1 = Number(prompt('Digite o primeiro número '));
let num2 = Number(prompt('Digite o segundo número'));

function comparacao() {
    if (num1 > num2) {
        console.log(`O ${num1} é maior que ${num2}`);
    }
    else if (num1 === num2) {
        console.log(`O ${num1} e ${num2} são iguais`);
    }
    else {
        console.log(`O ${num2} é maior que ${num1}`)
    }
}
comparacao()

EXERCICIO 6

let num1 = Number(prompt('Digite seu número'));

function mult() {
    console.log(num1 * num1)
}
mult()

Por que eu não consigo atribuiu o valor da funcão com o valor do resultado?

Exemplo:

let nome = prompt('Digite seu nome');

function name(nome) {
    console.log(`Olá ${nome} seja muito bem-vindo`);
}
name()

RESULTADO: Olá undefined seja bem vindo
3 respostas

Olá, Matheus. Como vai?

Parabéns por concluir os desafios! Você está mandando muito bem na organização do código e no uso de estruturas condicionais e de cálculo.

Sobre a sua dúvida: "Por que o resultado aparece como undefined?", essa é uma das viradas de chave mais importantes no aprendizado de programação. O problema acontece devido à diferença entre variáveis globais e parâmetros de função.

O que aconteceu no seu exemplo?

Quando você define uma função como function name(nome), você está dizendo ao JavaScript: "Esta função espera receber um dado de fora para trabalhar com ele".

  1. No seu exemplo, você criou uma variável global chamada nome.
  2. Mas, ao definir function name(nome), você criou uma variável local com o mesmo nome, que só existe dentro da função.
  3. Quando você chamou name(), não passou nada dentro dos parênteses. Por isso, o JavaScript atribuiu undefined para aquele parâmetro local.

Como resolver?

Existem duas formas principais de lidar com isso:

1. Passando o argumento (A forma mais recomendada):
A função deve ser "burra", ela não precisa saber onde está o nome, ela só precisa recebê-lo quando for chamada.

let nomeUsuario = prompt('Digite seu nome'); // Variável fora da função

function exibirSaudacao(nome) { // "nome" é o parâmetro (espaço reservado)
    console.log(`Olá ${nome} seja muito bem-vindo`);
}

exibirSaudacao(nomeUsuario); // Passamos a variável como argumento para a função

2. Retornando valores (return):
Muitas vezes, em vez de dar apenas um console.log, queremos que a função nos devolva o resultado para usarmos depois. É assim que "atribuímos o valor da função ao resultado":

function calcularDobro(numero) {
    return numero * 2; // A função "cospe" o resultado para fora
}

let resultado = calcularDobro(5); // Agora a variável "resultado" vale 10
console.log(resultado);

Dica de ouro para o Exercício 4 (Média)

No seu código da média, você usou o .toFixed(0). Lembre-se que isso vai arredondar a média para o número inteiro mais próximo. Se o resultado for 7.6, ele mostrará 8. Se a intenção for mostrar casas decimais, tente .toFixed(2).

Sua curiosidade sobre como os dados "entram e saem" das funções é o que vai te transformar em um programador avançado. Continue praticando essa passagem de parâmetros!

Ficou clara a diferença entre declarar o parâmetro e passar o argumento na hora de chamar a função?

Legal, entendi.

Entendi também que o Return não se comunica com o consolo.log, o return ela só executa a função e/ou chama uma acão que eu determinar.

exemplo:

let nome = prompt('Digite seu nome');

function nome1(nome) {
    console.log(`Olá ${nome}, seja muito bem-vindo`);

return `Olá ${nome}, seja muito bem-vindo`;
}

console.log(nome1(corno));

Seria algo assim para executar a função com a mensagem para aparecer no console.log?

Se estiver certo eu não entendi o porquê de determinar os nomes no console.log

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?