Практические задания - Урок 13: Null Safety

Инструкция: Решите все задания по порядку. Создайте отдельный файл .dart для каждой задачи или решите все в одном файле, разделяя задачи комментариями.

Простые задачи

Задача № 1: Non-nullable переменные

Объявите non-nullable переменную типа String с именем message, инициализируйте её любым значением и выведите в консоль.

Примерный вывод в консоли
Сообщение: Dart - это здорово!

Задача № 2: Nullable переменные

Создайте nullable-переменную String? name и сначала присвойте ей значение null, а затем — ваше имя. Выведите значение переменной в обоих случаях.

Примерный вывод в консоли
Имя: null
Имя: Алексей

Задача № 3: Проверка на null

Напишите функцию printStringLength, которая принимает nullable-строку String? text. Внутри функции проверьте, является ли строка null. Если нет — выведите её длину, если да — выведите сообщение "Строка пуста".

Примерный вывод в консоли
Длина строки 'hello': 5
Строка пуста

Сложные задачи

Задача № 4: Null-aware операторы

Создайте nullable-переменную String? text. Используя оператор ?? (null-coalescing operator), создайте новую переменную nonNullText, которая будет равна text, если он не null, или строке "Значение по умолчанию" в противном случае. Проверьте для двух случаев: когда text равен null и когда он имеет значение.

Примерный вывод в консоли
Значение: Значение по умолчанию
Значение: Привет, мир!

Задача № 5: Оператор утверждения !

Напишите функцию, которая принимает String?. Внутри функции, предположив, что строка точно не null, используйте оператор ! (null assertion operator), чтобы преобразовать её в верхний регистр и вернуть результат. Оберните вызов функции с null в блок try-catch, чтобы отловить ошибку.

Примерный вывод в консоли
Результат: HELLO
Ошибка: Нельзя использовать оператор '!' для null значения.

Задача № 6: Ключевое слово late

Создайте класс User с non-nullable полем late String name. Добавьте метод loadName(), который имитирует асинхронную загрузку имени и инициализирует поле name. В main создайте экземпляр класса, вызовите метод загрузки, а затем выведите имя пользователя.

Примерный вывод в консоли
Загрузка имени...
Имя пользователя: Dart Developer

Задача № 7: Null safety и коллекции

Дан список List<int?> numbers = [1, null, 3, null, 5, 6, null];. Напишите код, который вычисляет сумму только non-null элементов этого списка.

Примерный вывод в консоли
Исходный список: [1, null, 3, null, 5, 6, null]
Сумма non-null элементов: 15