Практические задания - Урок 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