Неизменяемые структуры данных:

  • Имейте одно состояние и никогда не меняйтесь
  • Проще создавать, отлаживать, тестировать и рассуждать о
  • Без побочных эффектов
  • Повышают производительность и обладают большей масштабируемостью, поскольку их легче кэшировать.
  • Более безопасны, поскольку предотвращают ссылки на нулевой указатель.
  • Потокобезопасны
  • Всегда в стабильном состоянии

Поскольку неизменяемые структуры данных никогда не изменяются, это означает, что во время операции изменения данных никогда не происходит сбоев. Когда неизменяемая структура данных инициализируется, она либо завершится неудачно, либо завершится успешно, возвращая действительную структуру данных, которая никогда не изменяется.

Чтобы внести изменения в неизменяемую структуру данных, мы должны создать новое дерево. Предположим, мы хотим обновить значение g в существующей древовидной структуре данных (предыдущий корень). Сначала мы должны создать узел g ’и построить новое дерево, пройдя по узлам, подключенным к g, и скопировав только те значения, которые необходимы для восстановления дерева. Ссылки на другие узлы можно создавать без создания новых узлов (это узлы белого цвета). При наличии нового корня новые листовые узлы добавляются в новую древовидную структуру.

После создания нового корня предыдущий / старый корень можно сохранить или пометить для удаления.

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

Неизменны ли счеты? Когда мы перемещаем бусинки, разве это не изменяет данные?

Можете ли вы придумать сегодня какие-либо решения, которые действительно используют неизменяемые структуры данных?

Вы когда-нибудь задумывались, как работает git?

Как ReactJS обновляет свои модели?

В футболе мы можем проиграть команде, потому что у нее есть игрок с определенными навыками. Когда мы снова сталкиваемся с командой, мы можем забыть прошлое, но это не меняет истории; Прошлое изменить невозможно. Когда прошлое не сохраняется, мы не можем извлекать уроки из него, и история повторяется. Изменчивость скрывает изменения.

Если вас интересуют более глубокие дискуссии о неизменяемых структурах данных и других связанных темах функционального программирования, посмотрите мою новую книгу.

Ваше здоровье!

Лекс