0Pricing
Dart Academy · Урок

Поля final и глубокая неизменяемость

Создавайте объекты, которые никогда не изменяются

«Поля final и глубокая неизменяемость» — бесплатный урок Dart Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Dart Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Dart Academy содержит 4 уроков всего.

Неизменяемость по замыслу

Неизменяемый объект никогда не меняется после создания. Благодаря этому данные остаются предсказуемыми и безопасными для совместного использования во всём приложении. 🔒

Знакомство с final

Поле final задаётся один раз во время создания объекта и больше не может быть переназначено. Значение фиксируется на весь срок существования объекта.

class Point {
  final int x;
  Point(this.x);
}

Переназначение вызывает ошибку

Попробуйте присвоить новое значение полю final — компилятор остановит Вас. Ошибка обнаруживается ещё до запуска программы.

final p = Point(3);
p.x = 9; // compile error

final и const

Используйте const, если значение известно во время компиляции, а final — если оно вычисляется во время выполнения. Оба ключевых слова запрещают последующее переназначение.

const pi = 3.14;
final now = DateTime.now();

Конструкторы const

Добавьте классу конструктор const, и Dart сможет создавать действительно фиксированные экземпляры. Все его поля также должны быть final.

class Color {
  final int rgb;
  const Color(this.rgb);
}

Общие экземпляры const

Два одинаковых объекта const в памяти являются одним и тем же экземпляром. Dart повторно использует их, экономя место и время.

const a = Color(0);
const b = Color(0);
print(identical(a, b)); // true

Поверхностная и глубокая неизменяемость

Поле final запрещает переназначение, но не замораживает объект, на который оно ссылается. В List, объявленный как final, всё ещё можно добавлять элементы.

final nums = [1, 2];
nums.add(3); // allowed!

Цель глубокой неизменяемости

Глубокая неизменяемость означает, что ничто доступное через объект также не может измениться. Для этого недостаточно одного final.

Заморозка коллекций

Оберните список в List.unmodifiable, чтобы любая попытка добавить или удалить элемент вызывала ошибку. Теперь вся структура остаётся неизменяемой.

final tags = List.unmodifiable([1, 2]);
tags.add(3); // throws at runtime

Литералы коллекций const

Добавьте const перед литералом, чтобы получить глубоко неизменяемую коллекцию, создаваемую во время компиляции. Изменить её вообще нельзя.

const days = ['Mon', 'Tue'];
// days.add(...) is forbidden

Почему это важно

Неизменяемые данные безопасны при работе из нескольких потоков, удобны для кэширования и хорошо подходят для управления состоянием во Flutter. Ошибки из-за незаметной мутации просто исчезают.

Быстрая проверка

Последняя проверка по темам final и неизменяемости.

Итоги

Вы узнали, что final фиксирует поле, const фиксирует значения времени компиляции, а для глубокой неизменяемости нужны неизменяемые или const-коллекции. 🎉

Часто задаваемые вопросы

Урок «Поля final и глубокая неизменяемость» бесплатный?

Да — полный текст урока «Поля final и глубокая неизменяемость» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Dart Academy, подпишись на CoddyKit PRO. Курс Dart Academy содержит 4 уроков всего.

Чему я научусь в уроке «Поля final и глубокая неизменяемость»?

Создавайте объекты, которые никогда не изменяются Ты практикуешь Dart Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Dart Academy?

Предыдущий опыт не требуется. Dart Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Поля final и глубокая неизменяемость»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Dart Academy?

Да. Каждый урок Dart Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Поля final и глубокая неизменяемость
  2. Классы sealed и исчерпывающий switch
  3. Модификаторы base, interface и final
  4. copyWith и равенство по значению
← Назад к Dart Academy