JavaScript em 2025: o que há de novo? Visão geral para iniciantes
\n\nO mundo do JavaScript não para. Em 2025, a linguagem que antes era apenas um "script para navegadores" se transformou em um poderoso ecossistema para criar aplicações de servidor (Node.js), aplicativos móveis e até software para desktop. Para um iniciante, pode parecer impossível acompanhar todas as mudanças. Mas não se preocupe: reunimos as novidades mais importantes que tornarão seu código mais limpo, rápido e compreensível.
\n\nNeste artigo, vamos analisar as principais mudanças do JavaScript em 2025. Você aprenderá como escrever código moderno em Node.js usando os recursos mais recentes da linguagem. Vamos lá!
\n\n1. Temporal API: Uma nova era para trabalhar com datas e horas
\n\nTrabalhar com datas em JavaScript sempre foi uma dor de cabeça. O antigo objeto Date é um verdadeiro "monstro de Frankenstein", cheio de bugs e comportamentos não intuitivos. Em 2025, finalmente surgiu a Temporal API completa. Esta é uma forma moderna, imutável e type-safe de trabalhar com datas.
Veja como fica na prática (Node.js):
\n\n// Jeito antigo (Date)\nconst oldDate = new Date();\nconsole.log(oldDate.toISOString()); // 2025-03-15T10:30:00.000Z\n\n// Jeito novo (Temporal)\nconst { Temporal } = require('@js-temporal/polyfill'); // ou módulo nativo\n\n// Data e hora atuais\nconst now = Temporal.Now.plainDateTimeISO();\nconsole.log(now.toString()); // 2025-03-15T10:30:00\n\n// Trabalhando com fusos horários\nconst meeting = Temporal.ZonedDateTime.from({\n timeZone: 'Europe/Moscow',\n year: 2025,\n month: 12,\n day: 25,\n hour: 10,\n minute: 0\n});\nconsole.log(meeting.toString()); // 2025-12-25T10:00:00+03:00[Europe/Moscow]\n\n// Comparação de datas (chega de getTime()!)\nconst date1 = Temporal.PlainDate.from('2025-01-01');\nconst date2 = Temporal.PlainDate.from('2025-06-15');\nconsole.log(Temporal.PlainDate.compare(date1, date2)); // -1 (date1 < date2)\n\n\nPor que isso é legal para um iniciante?
\n- \n
- Imutabilidade: os métodos não alteram o objeto original, mas retornam um novo. Menos bugs. \n
- Legibilidade: o código com
Temporalparece texto comum. \n - Type-safe: você não vai confundir data e hora. \n
2. Decoradores: Padronização e simplificação do código
\n\nDecoradores (Decorators) são funções especiais que permitem "envolver" outras funções, classes ou seus métodos, adicionando nova lógica. Em 2025, os decoradores finalmente se tornaram parte do padrão oficial ECMAScript, e sua sintaxe ficou mais simples.
\n\nAntes, os decoradores estavam disponíveis apenas através de flags experimentais ou TypeScript. Agora eles funcionam "de fábrica" no Node.js.
\n\nExemplo: Log de chamadas de métodos
\n\n// Definindo o decorador\nfunction log(target, context) {\n const methodName = context.name;\n\n return function (...args) {\n console.log(`[LOG] Chamada do método: ${methodName}`);\n console.log(`[LOG] Argumentos: ${JSON.stringify(args)}`);\n const result = target.call(this, ...args);\n console.log(`[LOG] Resultado: ${JSON.stringify(result)}`);\n return result;\n };\n}\n\nclass UserService {\n @log\n getUser(id) {\n return { id, name: 'Alice', role: 'admin' };\n }\n\n @log\n saveUser(user) {\n console.log('Usuário salvo:', user.name);\n return { success: true };\n }\n}\n\nconst service = new UserService();\nservice.getUser(42);\n// [LOG] Chamada do método: getUser\n// [LOG] Argumentos: [42]\n// [LOG] Resultado: {"id":42,"name":"Alice","role":"admin"}\n\nservice.saveUser({ name: 'Bob' });\n// [LOG] Chamada do método: saveUser\n// [LOG] Argumentos: [{"name":"Bob"}]\n// Usuário salvo: Bob\n// [LOG] Resultado: {"success":true}\n\n\nOnde isso é útil para um iniciante? Decoradores são ótimos para:
\n- \n
- Log (como no exemplo acima). \n
- Val