Sobes.tech
Назад к вопросам
Junior — Middle
106

Каким образом реализуется объект, свойства которого нельзя изменить после его создания?

Компании, где спрашивали
Pashapay

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

sobes.tech AI

Что хотят услышать интервьюеры:

Нужен ответ про immutable-объекты: после создания их состояние не меняется. В Flutter/Dart это обычно достигается через final поля, отсутствие сеттеров и конструктор с инициализацией всех свойств. Для удобства и корректного сравнения такие объекты часто делают const и/или переопределяют == и hashCode.

Определение:

Неизменяемый объект — это объект, у которого после создания нельзя изменить внутреннее состояние. В Dart/Flutter это обычно означает, что все поля объявлены как final, значения задаются только в конструкторе, а методы не меняют состояние, а возвращают новый объект при необходимости.

Пример использования:

class User {
  final String name;
  final int age;

  const User({
    required this.name,
    required this.age,
  });
}

void main() {
  const user = User(name: 'Alex', age: 30);

  // user.age = 31; // Ошибка: поле final нельзя изменить
}

Пояснение кода:

Код показывает простой immutable-класс User.

  1. Поля name и age объявлены как final, поэтому присвоить им новое значение после создания объекта нельзя.
  2. Значения полей задаются только через конструктор.
  3. Конструктор помечен как const, поэтому объект можно создавать как константу, если все переданные значения тоже известны на этапе компиляции.
  4. Попытка изменить user.age после создания приведёт к ошибке компиляции.
  5. Если нужно “изменить” такой объект, обычно создают новый экземпляр с нужными значениями.

Ключевые моменты:

  • final делает поле присваиваемым только один раз.
  • Неизменяемость обеспечивается не только полями, но и отсутствием методов, меняющих состояние.
  • const позволяет создавать канонизированные неизменяемые объекты, когда это возможно.
  • Для удобства работы с immutable-объектами часто используют copyWith, чтобы создавать новую версию с изменёнными полями.
  • В Flutter immutable-подход особенно важен для Widget, моделей состояния и объектов конфигурации.