До 30 ноября

Скидки до 81 000 руб и вторая профессия в подарок!

Главная | Все статьи | Дневник студента

Мутирование объектов, или почему важна иммутабельность в JavaScript

Время чтения статьи ~2 минуты
Статья написана студентом Хекслета. Мнение автора может не совпадать с позицией редакции
Мутирование объектов, или почему важна иммутабельность в JavaScript главное изображение

Мутирование объектов в JavaScript не всегда плохо, и в некоторых случаях это может быть полезным. Однако есть несколько причин, почему мутирование объектов может быть нежелательным:

  1. Несогласованность данных. Если объекты изменяются в разных частях программы, то могут возникнуть проблемы с несогласованностью данных. Например, если в одной части программы мы удалили свойство объекта, а в другой части программы ожидаем, что это свойство существует, то это может привести к ошибкам.

  2. Неявные побочные эффекты. Мутирование объектов может привести к неявным побочным эффектам, которые могут быть сложными для отслеживания. Например, если мы передаем объект в функцию, которая изменяет его свойства, то это может повлиять на другие части программы, которые используют этот же объект.

  3. Сложность отладки. Мутирование объектов может сделать программу сложной для отладки, особенно если объект изменяется в разных частях программы. Это может привести к тому, что ошибки будут трудно обнаруживать и исправлять.

  4. Чтобы избежать этих проблем, многие разработчики придерживаются практики иммутабельности (immutability), то есть создания объектов, которые не могут быть изменены позже. Иммутабельность может сделать программу более предсказуемой и простой для понимания и отладки.

Для создания неизменяемых объектов в JavaScript можно использовать библиотеки, такие как Immutable.js или Immer.js. Но также можно реализовать иммутабельность самостоятельно. Вот пример кода, демонстрирующий, как создать неизменяемый объект с помощью JavaScript:

const person = Object.freeze({ name: 'John', age: 30 });

В этом примере мы используем метод создания неизменяемого объекта Object.freeze(), который не может быть изменен после создания. Если мы попытаемся изменить свойство объекта, мы получим ошибку:

person.age = 31; // TypeError: Cannot assign to read only property 'age' of object

Также мы можем создать неизменяемый массив, используя метод Object.freeze() и распространение (spread) оператор:

const numbers = Object.freeze([1, 2, 3]);
const newNumbers = [...numbers, 4]; // создаем новый массив, добавляя элемент
console.log(numbers); // [1, 2, 3]
console.log(newNumbers); // [1, 2, 3, 4]

В этом примере мы используем распространение (spread) оператор, чтобы создать новый массив, добавляя новый элемент, но не изменяя исходный массив. Затем мы выводим оба массива в консоль, чтобы убедиться, что исходный массив остался неизменным.

Реализация неизменяемости объектов может иметь некоторые накладные расходы по производительности, особенно при работе с большими объектами и массивами. Однако в некоторых случаях это может сделать программу проще для понимания и отладки.

Аватар пользователя Андрей Мазунин
Андрей Мазунин 21 февраля 2023
7
Рекомендуемые программы
профессия
Осваивайте разработку веб-страниц, оживляйте дизайн макетов, публикуйте сайты и приложения. Отслеживайте ошибки в интерфейсе и устраняйте их
10 месяцев
с нуля
Старт 28 ноября
профессия
Обучитесь разработке бэкенда сайтов и веб-приложений — серверной части, которая отвечает за логику и базы данных
10 месяцев
с нуля
Старт 28 ноября
профессия
Выполняйте ручное тестирование веб-приложений, находите ошибки в продукте. Узнайте все о тест-дизайне.
4 месяца
с нуля
Старт 28 ноября
профессия
Научитесь разработке веб-приложений, сайтов и программного обеспечения на языке Java, программируйте и используйте структуры данных
10 месяцев
с нуля
Старт 28 ноября
профессия
новый
Собирайте, анализируйте и интерпретируйте данные, улучшайте бизнес-процессы и продукт компании. Обучитесь работе с библиотеками Python
9 месяцев
с нуля
Старт 28 ноября
профессия
Занимайтесь созданием сайтов, веб-приложений, сервисов и их интеграцией с внутренними бизнес-системами на бекенд-языке PHP
10 месяцев
с нуля
Старт 28 ноября
профессия
Создание веб-приложений со скоростью света
5 месяцев
c опытом
Старт 28 ноября
профессия
Обучитесь разработке визуальной части сайта — фронтенда, а также реализации серверной — бэкенда. Освойте HTML, CSS, JavaScript
16 месяцев
с нуля
Старт 28 ноября
профессия
Разработка бэкенд-компонентов для веб-приложений
10 месяцев
с нуля
Старт 28 ноября
профессия
новый
Организовывайте процесс автоматизации тестирования на проекте, обучитесь языку программирования JavaScript, начните управлять процессом тестирования
8 месяцев
c опытом
Старт 28 ноября