Retorno e Escopo: O Segredo das Funções

O que vais aprender nesta aula:

  • A palavra-chave return para devolver valores
  • A diferença entre `mostrar` (console.log) e `devolver` (return)
  • Escopo Global vs Local (Onde vivem as variáveis?)

🧠 Teoria (com Analogia e Contexto Real)

Muitos alunos confundem "imprimir no ecrã" com "devolver um valor". Vamos esclarecer isso.

🏧 Analogia do Multibanco

Imagina um Multibanco (ATM):

  • console.log(): É o talão que sai a dizer "Levantaste 20€". Tu lês a informação, mas não podes comprar pão com o talão.
  • return: São as notas de 20€ que saem da ranhura. Podes pegar nesse dinheiro e usá-lo noutra loja.

As funções úteis são as que entregam dinheiro (return), não só as que imprimem recibos!

🏠 Analogia da Casa (Escopo)

Variável Global (Rua): Toda a gente vê e pode usar.

Variável Local (Dentro de Casa): Só quem está dentro da casa (função) é que vê. Cá fora, ninguém sabe que ela existe.

💻 Prática (Orientada e Progressiva)

Vamos transformar funções simples em ferramentas poderosas:

Exemplo 1: Usar o `return`

Agora a função devolve o valor, e guardamos numa variável.

function somar(a, b) {
    let resultado = a + b;
    return resultado; // "Aqui tens o valor, usa-o!"
}

let total = somar(10, 5); // total fica com 15
console.log(total * 2);   // 30 (Usámos o resultado noutra conta!)

Exemplo 2: Escopo (Onde a variável vive)

let nomeGlobal = "Portugal"; // Global

function teste() {
    let nomeLocal = "Lisboa"; // Local
    console.log(nomeGlobal);  // Funciona (vê a rua)
    console.log(nomeLocal);   // Funciona (está na casa)
}

teste();
console.log(nomeGlobal); // Funciona
console.log(nomeLocal);  // ❌ ERRO! nomeLocal is not defined
⚠️
Regra de Ouro: Assim que o código atinge o return, a função PARA imediatamente e sai. Nada que escrevas depois do return será executado.

✅ Verificação de Conhecimento

1. O que acontece a uma função depois de executar o `return`?

Continua a executar o código restante.
Para imediatamente e devolve o valor.
Recomeça do início.

2. Consigo aceder a uma variável criada DENTRO de uma função, a partir de FORA?

Sim, sempre.
Não, ela é "Local" e morre quando a função termina.
Sim, se usar a palavra-chave "magic".

3. Qual a diferença entre `console.log` e `return`?

São a mesma coisa.
`console.log` mostra num ecrã, `return` entrega o dado ao código.
`return` escreve na consola a vermelho.

🧩 Desafio Prático

Conversor de Anos de Cão

Dizem que 1 ano humano equivale a 7 anos de cão (aproximadamente).

Cria uma função calcularIdadeCao que recebe a idade humana e retorna a idade canina.

Requisitos:

  • A função deve ter um return.
  • Fora da função, guarda o resultado numa variável idadeRex.
  • Mostra na consola: "O Rex tem X anos caninos."
// 1. Função...
// 2. Variável que recebe o return...
// 3. Log...
Mostrar Solução
function calcularIdadeCao(idadeHumana) {
    return idadeHumana * 7;
}

let idadeRex = calcularIdadeCao(3); // Rex tem 3 anos humanos
console.log("O Rex tem " + idadeRex + " anos caninos.");

📌 Explicação: A função processa e "cospe" o número 21. A variável idadeRex apanha esse 21 e guarda-o. Se usássemos apenas console.log dentro da função, a variável idadeRex ficaria vazia (undefined)!