Перейти к содержанию
  • Лента
  • Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы
Свернуть
exlends
Категории
  1. Главная
  2. Категории
  3. Языки программирования
  4. JavaScript
  5. ECMAScript 2026 вышел: Map.getOrInsert, Set методы и Temporal API меняют разработку

ECMAScript 2026 вышел: Map.getOrInsert, Set методы и Temporal API меняют разработку

Запланировано Прикреплена Закрыта Перенесена JavaScript
ecmascript 2026temporal apimap set
1 Сообщения 1 Постеры 74 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Ответить
  • Ответить, создав новую тему
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • hannadevH Не в сети
    hannadevH Не в сети
    hannadev
    написал в отредактировано
    #1

    ECMAScript 2026 только что вышел, и он приносит долгожданные изменения в JavaScript. Главные новинки - это методы для Map.getOrInsert и Set, плюс полноценный Temporal API для работы с датами. Эти фичи упростят код, сделают его надежнее и избавят от болячек старого Date.

    Зачем это нужно? Разработчики часто мучаются с проверками ключей в Map или сложными датами в разных зонах. Теперь код станет короче, а ошибки - реже. Давайте разберем, как это работает на практике и почему экосистема разработки уже меняется.

    Map.getOrInsert и новые методы Set: проще манипуляции с данными

    Метод Map.getOrInsert позволяет сразу получать значение по ключу или вставлять новое, если ключа нет. Это избавляет от шаблонного кода с has() и set(). Представьте: раньше писали if (!map.has(key)) map.set(key, defaultValue); return map.get(key). Теперь один вызов - и готово.

    Для Set добавили методы вроде addIfNotPresent или union/intersection, которые упрощают операции над множествами. Это полезно в алгоритмах, фильтрах данных или кэшах. Например, при объединении наборов пользователей без дубликатов код сокращается вдвое. Такие улучшения ускоряют разработку бэкенда и фронта, где коллекции используются повсеместно.

    Вот ключевые методы для Map и Set в ES2026:

    • Map.getOrInsert(key, factory): возвращает значение или создает через factory-функцию.
    • Set.union(otherSet): возвращает новое множество с объединением.
    • Set.intersection(otherSet): только общие элементы.
    • Map.merge(otherMap): сливает карты с обработкой коллизий.
    Метод Старый способ Новый способ
    Получить/вставить в Map if (!m.has(k)) m.set(k, v); m.get(k) m.getOrInsert(k, () => v)
    Объединение Set new Set([…s1, …s2]) s1.union(s2)
    Пересечение Set new Set([…s1].filter(x => s2.has(x))) s1.intersection(s2)

    Важно: factory в getOrInsert вызывается только при отсутствии ключа, что экономит ресурсы.

    Temporal API: прощай, проблемный Date

    Temporal API - это новая стандартная система для дат и времени, которая заменяет устаревший Date. Date notorious за мутабельность, проблемы с часовыми поясами и неопределенное поведение с leap seconds. Temporal объекты неизменяемы, поддерживают time zones и календари из коробки.

    Temporal вводит классы вроде Temporal.ZonedDateTime, Temporal.Duration и Temporal.PlainDate. Они парсят ISO 8601 точно, без сюрпризов. Например, добавление дней всегда учитывает месяц и високосные годы. Это критично для приложений с расписаниями, финансовыми транзакциями или международными пользователями.

    Основные классы Temporal:

    • Temporal.PlainDate: дата без времени.
    • Temporal.PlainDateTime: дата + время.
    • Temporal.ZonedDateTime: с часовым поясом.
    • Temporal.Duration: разница между датами.
    • Temporal.Now: текущая дата/время.

    Пример: const dt = Temporal.Now.zonedDateTimeISO(‘Europe/Moscow’); dt.add({days: 1}).toString() даст точный результат без глюков.

    Свойство Date Temporal
    Изменяемость Мутабельный Неизменяемый
    Time zones Строки вроде ‘UTC’ Полные идентификаторы
    Календари Только Gregorian Любые, включая японский
    Диапазон Ограничен От -271821 до +275760 года

    Нюанс: Temporal использует 24-часовой формат и игнорирует leap seconds для предсказуемости.

    Ресурсное управление: using и await using

    ES2026 вводит using и await using для автоматической очистки ресурсов. Это как RAII в C++ или with в Python - ресурсы вроде файлов или соединений закрываются при выходе из блока, даже при ошибках.

    Синхронный using подходит для локальных файлов, асинхронный await using - для сетевых запросов или БД. Переменные блок-локальные и immutable, как const. Нет нужды в try-finally, код чище и безопаснее.

    Преимущества:

    • Автоматическая утилизация.
    • Поддержка async/await.
    • Снижение утечек памяти.

    Пример:

    await using stream = fetch(url).then(r => r.body); // stream закроется автоматически
    

    Новые инструменты для async и массивов

    Появился Array.fromAsync() для создания массивов из асинхронных итераторов. Полезно при парсинге данных из API. Также Error.isError() для точной проверки ошибок и Base64/HEX для Uint8Array.

    Это ускоряет работу с данными в Node.js и браузерах. Pattern Matching и Records/Tuples на Stage 3 добавляют функциональность.

    Ключевые фичи:

    • Array.fromAsync(iterable).
    • Uint8Array.fromBase64(str).
    • using res = openFile(path).
    Фича Применение
    Array.fromAsync Параллельный fetch
    using File handles
    Error.isError Гибкие проверки

    Temporal меняет правила игры в JS

    ES2026 с Map.getOrInsert, Set-методами и Temporal решает накопившиеся проблемы JavaScript. Код становится короче, надежнее, особенно в enterprise-приложениях. Осталось дождаться полной поддержки в Safari и потестировать polyfill’ы.

    Эти изменения повлияют на библиотеки вроде Moment.js - многие мигрируют на Temporal. Стоит присмотреться к комбинациям с Intl API для локализации.

    1 ответ Последний ответ
    0

    Здравствуйте! Похоже, вас заинтересовала эта беседа, но у вас ещё нет аккаунта.

    Надоело каждый раз пролистывать одни и те же посты? Зарегистрировав аккаунт, вы всегда будете возвращаться на ту же страницу, где были раньше, и сможете выбирать, получать ли уведомления о новых ответах (по электронной почте или в виде push-уведомлений). Вы также сможете сохранять закладки и ставить лайки постам, чтобы выразить свою благодарность другим участникам сообщества.

    С вашими комментариями этот пост мог бы стать ещё лучше 💗

    Зарегистрироваться Войти

    Категории

    • Главная
    • Новости
    • Фронтенд
    • Бекенд
    • Языки программирования

    Контакты

    • Сотрудничество
    • info@exlends.com

    © 2024 - 2026 ExLends, Inc. Все права защищены.

    Политика конфиденциальности
    • Войти

    • Нет учётной записи? Зарегистрироваться

    • Войдите или зарегистрируйтесь для поиска.
    • Первое сообщение
      Последнее сообщение
    0
    • Лента
    • Категории
    • Последние
    • Метки
    • Популярные
    • Пользователи
    • Группы