tempo é Relativo: Callbacks e Timers

O que vais aprender nesta aula:

  • JavaScript Síncrono vs Assíncrono
  • Executar código "daqui a pouco": setTimeout
  • Executar código "repetidamente": setInterval

🧠 Teoria (com Analogia e Contexto Real)

Por defeito, o JavaScript lê uma linha de cada vez. Mas se uma linha demorar muito (ex: carregar um vídeo), não queremos bloquear o site todo!

🍕 Analogia da Pizzaria

Síncrono (Bloqueante): O funcionário recebe o pedido, vai para a cozinha, faz a pizza, entrega, e SÓ DEPOIS atende o próximo cliente. (A fila pára!).

Assíncrono (Non-Blocking): O funcionário anota o pedido e diz "Eu chamo quando estiver pronta!". Enquanto a pizza coze, ele atende outras pessoas.

💻 Prática (Orientada e Progressiva)

Controlar o tempo é um superpoder no JS.

1. setTimeout (Alarme)

Executa UMA VEZ após X milissegundos.

console.log("1. Começou");

setTimeout(function() {
    console.log("2. Passaram 3 segundos!");
}, 3000);

console.log("3. Fim (Isto aparece antes do 2!)");

2. setInterval (Metrónomo)

Executa REPETIDAMENTE a cada X milissegundos.

let contador = 0;
const intervalo = setInterval(() => {
    contador++;
    console.log("Contagem: " + contador);

    if (contador === 5) {
        clearInterval(intervalo); // Pára o relógio
        console.log("Stop!");
    }
}, 1000); // 1 segundo

🧪 Experiência: A Bomba Relógio

Clica em "Armar Bomba". Tens 5 segundos para clicar em "Desarmar" antes que rebente!

💣 5

✅ Verificação de Conhecimento

1. O Javascript é, por natureza...

Multi-tarefa (faz tudo ao mesmo tempo).
Single-threaded (faz uma coisa de cada vez).
Totalmente aleatório.

2. Como paro um `setInterval`?

Com `break`.
Não é possível parar, roda para sempre.
Guardando o ID numa variável e usando `clearInterval(ID)`.

3. Qual destes tempos é igual a 2 segundos e meio?

2.5
250
2500