Назад к вопросам
Middle
155
questionbank

Что такое иммутабельный объект?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

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

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

  • Предсказуемость: Состояние объекта не меняется неожиданным образом.
  • Потокобезопасность: Не нужно синхронизировать доступ к состоянию объекта из разных потоков.
  • Упрощение отладки: Состояние объекта в любой момент времени известно.
  • Кэширование: Можно кэшировать результаты операций, так как они всегда одни и те же для данного объекта.

Пример в PHP (хотя в стандартных классах PHP иммутабельность не является строгой по умолчанию, ее можно реализовать):

<?php
final class ImmutablePoint
{
    private int $x;
    private int $y;

    public function __construct(int $x, int $y)
    {
        $this->x = $x;
        $this->y = $y;
    }

    public function getX(): int
    {
        return $this->x;
    }

    public function getY(): int
    {
        return $this->y;
    }

    // Метод, который "изменяет" точку, но возвращает новый объект
    public function move(int $dx, int $dy): self
    {
        return new self($this->x + $dx, $this->y + $dy);
    }
}

$point1 = new ImmutablePoint(1, 2);
$point2 = $point1->move(3, 4);

// Состояние $point1 не изменилось
// Состояние $point2 отличается
?>

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