TGViewer
artalog artalog @artalog · 4.21K subscribers
Post #45 2.98K
Transient Data Structures

Я, как ярый фанат иммутабельности, прошу вас - мутируйте! Хуже не знания хороших практик только их избыточное применение.

Часто, можно встретить код редьюса в котором каждая итерация возвращает иммутабельный результат, вроде:
.reduce((acc, el) => ({ ...acc, [el.id]: el }), {})

Это абсолютно избыточное применение иммутабельности. Обоснованием такого кодстайла может быть поддержание его консистентности, но это не стоит квадратичной сложности, которая проявляется в этом примере.

Обычно, мутировать боятся, потому что не понимают когда это можно делать безопасно. Ответ - если соблюдается ссылочная прозрачность. Проще говоря, когда мутируемое значение не передается по ссылке куда-то, где эту мутацию можно обнаружить.
Изначальный пример можно переписать так:

.reduce((acc, el) => {
acc[el.id] = el;
return acc;
}, {})

Этот код будет намного быстрее и хотя мы мутируем здесь значение это невозможно обнаружить извне функции reduce, а значит и проблем с этим никаких не будет.

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

#immutable #perf
ru.hexlet.io Что такое ссылочная прозрачность в программировании? В функциональном программировании ссылочная прозрачность обычно означает, что выражение в коде может быть заменено результатом выполнения этого кода (или чем-либо, имеющим такое же значение), при этом результаты выполнения всего кода не изменятся. Эта концепция…
  • 👍 39
  • 🤔 6
  • 🔥 2
  • ❤ 1
  • 👎 1
More from @artalog
  1. Oct 1, 2026Для меня главный приоритет в reatom.dev уже несколько лет - универсальность. Он должен реш…
  2. Sep 30, 2026https://t.me/synaptic_garden/1370 (уж извините за частый постинг, тем более про ИИ, но важ…
  3. Sep 30, 2026Post #2011
  4. Sep 30, 2026Очень круто! Композиты сильно упрощают работу с иммутабельными данными, точнее с их equali…
  5. Sep 29, 2026Bun там с AOT экспериментирует!
  6. Sep 25, 2026Пятничная демка! Превратила загрузку сайта в музыку. Чтобы треды можно было не только виде…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →