В программировании неизменяемым (англ. immutable) называется объект, состояние которого не может быть изменено после создания.

В функциональном программировании все (в случае чистых языков) или почти все (в случае «нечистых» — англ. impure — языков) данные в программе, как локальные, так и глобальные, являются неизменяемыми. С одной стороны, это существенно повышает стабильность программ за счёт упрощения формальной верификации программ. С другой, это затрудняет решение ряда задач (из которых наиболее часто отмечается задача реализации интерфейса пользователя, который в своей сути представляет собой изменяемое состояние), что вынуждает усложнять системы типов языка — например, монадами или уникальными типами.

В объектно-ориентированном программировании неизменяемые объекты создаются посредством соответствующего шаблона проектирования.

Неизменяемые объекты интересны, например, тем, что потоко-безопасны.

Виды неизменяемых объектов

править

Объект может быть неизменяемым как полностью, так и частично. Например, применение директивы const к какому-либо члену класса в C++ делает объект частично неизменяемым. В некоторых случаях объект считается неизменяемым с точки зрения пользователя класса, даже если изменяются его внутренние поля. Как правило, неизменяемый объект получает все внутренние значения во время инициализации, либо значения устанавливаются в несколько этапов, но до того, как объект будет использован.

См. также

править

Изменяемый тип

Ссылки

править

📚 Artikel Terkait di Wikipedia

Сборка мусора

отслеживания ссылок между разными поколениями. Неизменные объекты (англ. immutable objects) Правила языка программирования могут устанавливать, что объекты,

Objective-C

copy = [super copyWithZone:zone]; Копирование неизменяемых объектов Для immutable объектов создание копии нецелесообразно, и можно ограничиться отправкой

Шаблон проектирования

Model-View-ViewModel. Presentation–abstraction–control[англ.]. Naked objects. Hierarchical Model-View-Controller. View-Interactor-Presenter-Entity-Routing

Python

— [Архивировано 22 января 2021 года.] Luciano Ramalho. Python tuples: immutable but potentially changing - O'Reilly Radar (англ.). radar.oreilly.com.

Приспособленец (шаблон проектирования)

put(data, new WeakReference<FontData> (data)); } // return the single immutable copy with the given values return flyweightData.get(data).get(); } @Override

Прототип (шаблон проектирования)

Prototype: def __init__(self): self._objects = {} def register_object(self, name, obj): """Register an object""" self._objects[name] = obj def unregister_object(self

OCaml

поддержка программирования с неизменяемыми структурами данных (англ. immutable programming), автоматическая сборка мусора, эффективный компилятор в машинный

Объектный пул

_num_objects = max(kwargs['num'], 0) self._pred = kwargs['update_func'] self._max_objects = kwargs.get('max', self._num_objects) # Create the objects self