O mais recente
Há um padrão que qualquer pessoa que trabalhe com promessas já escreveu: criar uma promessa e guardar o resolve numa variável de fora, para a resolver mais tarde, a partir de outro sítio do código. Escrevia-se assim, e não era bonito: let resolver; let rejeitar; const promessa = new Promise((resolve…
Ler o artigo→A Temporal API é a nova especificação oficial do JavaScript (incorporada no ECMAScript 2026 depois de alcançar o Stage 4 em março de 2026), criada para substituir de vez o antigo e problemático objeto Date . Porque é que a Temporal API é revolucionária? Imutabilidade: qualquer alteração num objeto (…
Ler o artigo→O Set no JavaScript é um objeto global nativo que permite guardar valores únicos de qualquer tipo, sejam eles valores primitivos ou referências de objetos. Impede automaticamente a existência de elementos duplicados na coleção. Novas funcionalidades de conjuntos (Set) Aqui estão as novas operações n…
Ler o artigo→Não é para passar em entrevistas. É para responder à pergunta que aparece sempre: funcionava bem com cem registos, porque é que com dez mil demora meio minuto? 1. As quatro que aparecem mesmo O(1) — o tempo não depende do tamanho. Ir buscar a um Map , ler array[5] . O(n) — percorre tudo uma vez. Um …
Ler o artigo→Um pedido que já ninguém quer continua a ocupar ligação, a gastar bateria, e a chegar atrasado para escrever por cima de um resultado mais recente. O AbortController é a forma padrão de o cortar a meio — e não serve só para o fetch . 1. O básico const controlador = new AbortController(); fetch('/api…
Ler o artigo→"Quero que a página se atualize sozinha" tem três respostas possíveis, e escolher a mais poderosa por defeito é a forma mais comum de complicar um problema simples. 1. Polling: perguntar de vez em quando setInterval(async () => { const resposta = await fetch('/api/notificacoes'); mostrar(await respo…
Ler o artigo→O truque de copiar um objeto com JSON.parse(JSON.stringify(objeto)) anda em código de produção há anos. Funciona até ao dia em que o objeto tem uma data, um Map , um undefined ou uma referência a si próprio — e aí falha em silêncio ou rebenta. O structuredClone é a função nativa que faz esse trabalh…
Ler o artigo→Durante vinte e cinco anos, o sort() e o reverse() alteraram o array em que eram chamados. É a origem de uma classe inteira de bugs: uma função recebe uma lista, ordena-a para mostrar, e devolve-a alterada a quem a emprestou. O ECMAScript 2023 acrescentou quatro métodos que fazem o mesmo sem tocar n…
Ler o artigo→O Object.groupBy entrou no JavaScript com o ECMAScript 2024 e resolve uma coisa que toda a gente já escreveu à mão pelo menos uma vez: separar uma lista em grupos, segundo um critério qualquer. O que muda Deixa de ser preciso um reduce com um acumulador e a verificação do costume para o caso de a ch…
Ler o artigo→Este código funciona em desenvolvimento e cai em produção: import { readFile } from 'node:fs/promises'; const conteudo = await readFile('registos.csv', 'utf8'); const linhas = conteudo.split('\n'); Com um ficheiro de teste de 2 MB, é instantâneo. Com o ficheiro real de 3 GB, o processo tenta carrega…
Ler o artigo→Carregar imagens só quando são precisas, animar uma secção quando ela aparece, marcar no menu o capítulo que está a ser lido: são três funcionalidades diferentes com o mesmo problema por baixo — saber o que está visível. A forma antiga era ouvir o evento scroll e medir posições. Corria dezenas de ve…
Ler o artigo→Duas técnicas para o mesmo problema — um evento que dispara vezes de mais — e que resolvem casos diferentes. Trocá-las dá sempre uma sensação estranha na interface. Debounce: espera que pare . Só executa quando as coisas acalmam. Throttle: executa durante , mas no máximo uma vez a cada X. 1. Debounc…
Ler o artigo→Há um reflexo antigo em JavaScript: precisa de formatar uma data, instala uma biblioteca. Só que o objeto Intl está no browser e no Node há anos, sabe o que é o português europeu, e não pesa um byte no bundle. 1. Datas const data = new Date('2026-04-07T15:30:00'); new Intl.DateTimeFormat('pt-PT').fo…
Ler o artigo→O async/await tornou o código assíncrono legível como se fosse sequencial. E é precisamente por parecer sequencial que se cometem estes quatro erros — todos eles passam despercebidos em desenvolvimento. 1. Esperar por coisas que não dependem umas das outras // 900 ms: três esperas de 300 ms, uma atr…
Ler o artigo→As expressões regulares têm fama de ilegíveis, e a culpa é de quem as usa para o que não devem. Com meia dúzia de construções resolve-se a esmagadora maioria dos casos do dia-a-dia. 1. Classes: que caracteres /[aeiou]/ // um destes /[^aeiou]/ // qualquer um menos estes /[a-z0-9]/ // intervalos /\d/ …
Ler o artigo→Durante anos, pôr um modal numa página significava escolher uma biblioteca — ou reescrever à mão o mesmo conjunto de problemas: o fundo escurecido, o foco preso lá dentro, o Escape a fechar, o scroll da página por trás. O elemento <dialog> traz isso tudo de origem, e está em todos os browsers atuais…
Ler o artigo→O JavaScript tem uma thread só. É a mesma que corre o seu código, responde aos cliques e desenha a página — e é por isso que um ciclo pesado congela tudo, incluindo o cursor a piscar numa caixa de texto. 1. O modelo, em três peças A pilha — o que está a correr agora. Uma coisa de cada vez. As tarefa…
Ler o artigo→