Глоссарий

Неизменяемость (Immutability)

Неизменяемый объект — тот, чьё состояние нельзя изменить после создания. Вместо мутации — возвращается новый объект с обновлёнными значениями. Устраняет целый класс багов, связанных с неожиданными мутациями.

Преимущества

Пример (Value Object)

class Money {
  public function __construct(
    public readonly int $amount,
    public readonly string $currency
  ) {}

  public function add(Money $other): self {
    return new self($this->amount + $other->amount, $this->currency);
  }
}

В JavaScript

const, Object.freeze(), spread-оператор {...obj, key: newVal}. Библиотеки: Immer, Immutable.js.