@Eugene-123

Что такого хорошего в иммутабельности?

Что такого хорошего в иммутабельности? Пытаюсь найти информацию на эту тему, но все время натыкаюсь на абстрактные фразы типа: "возможность избежать побочных эффектов". Можете ли вы предложить однопоточный сценарий/пример побочного эффекта? Если у меня есть объект, который должен быть доступен из разных точек программы, то как мне функциональное программирование поможет?
Также прошу не указывать в качестве плюсов иммутабельности, такие вещи как возможность распараллеливания, кэширования. Это все очень интересно, но это все утилитарные вещи, они не относится к иммутабельности как к концепции самой по себе.
  • Вопрос задан
  • 156 просмотров
Решения вопроса 1
vabka
@vabka
Токсичный шарпист
Иммутабельность - это про гарантию, что ты случайно не изменишь то значение, которое тебе передали извне.
И что функция, в которую ты передал своё значение, не изменит его.

Вот тупой пример:
let today = now().date
let tomorrow = today.addDays(1)
assert(today != tomorrow)

И вот если DateTime мутабельный, то мы можем словить ошибку в этой ситуации.
Иммутабельность же позволяет на корню этого избежать.

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

А отстутсвие сайд-эффектов позволяет делать вычисления ленивыми, и тоже даёт возможность безопасно распараллеливать, тк нет привязки к порядку операций.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
angrySCV
@angrySCV
machine learning, programming, startuping
ну например можно эффективно переиспользовать и хранить структуры данных.

вот например сложить 2 списка:
в случае с иммутабельным чтоб создать третий общий список, тебе достаточно только ссылки указать где надо, на первый и второй список - оба списка у тебя будут переиспользоваться, а в память добавится только пару дополнительных ссылок (это вычислительно быстро и требует мало памяти).

в случае с мутабельными списками - тебе нужно создать третий, копируя все элементы первого и второго, что затратно как по времени исполнения, так и по объему хранения.
если ты в мутабельной структуре попробуешь тоже ссылочками сделать новую структуру, у тебя может получится такая ситуация, что уже ПОСЛЕ создания нового списка, при изменении в исходной структуре - эти изменения появятся в твоём новом списке, как неконтролируемое изменение, которое ты не выполнял.
В итоге поскольку в иммутабельных структурах есть гарантии, что они будут не измены, то их можно переиспользовать при создании новых структур данных, мутабельные же нельзя.
Ответ написан
Комментировать
xez
@xez
TL Junior Roo
Представьте бухгалтерскую книгу, ту что на бумаге - вот вам пример иммутабельности.
Главные плюсы - консистентность данных и атомарность операций.
Ответ написан
@potan
Функциональный программист
Иммутабельность упрощяет композируемость - состыковать разные куски кода легче, если они свободны от побочных эффектов. Кроме того иммутабельный код при прочих равных проще читать и модифицировать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы