Повторение - Безопасная обработка null
Часть раздела Основы путешествия по Dart на Coddy. Урок 82 из 94.
Задание
ЛегкоВы создаёте систему профилей пользователей для мобильного приложения. Создайте класс UserProfile, который демонстрирует ваше понимание функций null-безопасности Dart.
Реализуйте класс UserProfile со следующим:
- Свойства, не допускающие null (всегда должны иметь значение):
idтипаintcreatedDateтипаString
- Свойства, допускающие null (могут быть null при инициализации):
nameтипаString?emailтипаString?ageтипаint?
- Свойство с поздней инициализацией:
displayNameтипаString, объявленное с использованием ключевого словаlate
- Конструктор:
- Принимает
idиcreatedDateв качестве обязательных параметров - Инициализирует
displayNameзначением"Guest"
- Принимает
Метод:
<strong>void printProfile()</strong>Выводит профиль пользователя в следующем формате:User Profile: ID: <id> Created: <createdDate> Name: <name or 'Not provided'> Email: <email or 'Not provided'> Age: <age or 'Not provided'> Display Name: <displayName> -------------------- Метод:
<strong>void updateEmail(String? newEmail)</strong>- Обновляет свойство
emailновым значением.
- Обновляет свойство
- Метод:
<strong>String getDisplayName()</strong>- Если
nameне равен null, устанавливаетdisplayName = name!(используя оператор утверждения non-null) - Возвращает текущее значение
displayName
- Если
Важно: После обновления свойства name вы должны вызвать getDisplayName(), чтобы обновить поле displayName перед повторным выводом профиля.
Завершите код для создания профиля, его обновления и вывода информации, как показано в ожидаемом результате.
Попробуйте сами
void main() {
// Создать профиль пользователя
final profile = UserProfile(1, 'today');
// Вывести начальный профиль
profile.printProfile();
// Обновить профиль
profile.name = 'John Doe';
profile.updateEmail('john@example.com');
profile.age = 30;
// Обновить отображаемое имя и вывести обновленный профиль
profile.getDisplayName(); // Вызвать это для обновления displayName
profile.printProfile();
}
class UserProfile {
// TODO: Добавить свойства (id, createdDate, name, email, age, displayName)
// TODO: Создать конструктор
// TODO: Реализовать метод printProfile()
// TODO: Реализовать метод updateEmail()
// TODO: Реализовать метод getDisplayName()
}Все уроки раздела Основы
4Операторы, часть 2
Операторы сравненияЛогический ANDЛогический ORЛогический NOTОператоры проверки типаПовторение - Сравнения7Работа со строками
Конкатенация строкИнтерполяция строкМногострочные строкиСвойства строкОсновные методы строк10Коллекции - Основы словарей
Что такое словари?Создание словаряДоступ к значениям по ключуПары ключ-значениеПолучение размера словаряПолучение ключейПолучение значенийПроверка существования ключа13Null-безопасность в деталях
Понимание nullNullable-типыNon-nullable-типыОператор утверждения nullПоздняя инициализацияПовторение - Безопасная обработка null2Переменные и основные типы данных
Что такое переменные?СтрокиЦелые числа (int)Вещественные числа (double)Булевы значения (bool)Вывод типов с 'var'Финальные переменныеКонстантные переменныеСоглашения об именованииОсновы null-безопасностиПовторение - Объявление переменных8Поток управления - Циклы
Цикл 'for'Цикл 'while'Цикл 'do-while'Использование 'break' в циклахИспользование 'continue' в циклахИтог - Повторение кода3Операторы. Часть 1
Арифметические операторыЦелочисленное делениеОператор модуляИнкремент и декрементСокращённые присваиванияИтог - Простые вычисления6Управление потоком - Принятие решений
Оператор 'if'Оператор 'else'Оператор 'else if'Повторение - Простые решенияВложенные операторы 'if'Оператор 'switch'9Коллекции - Основы списков
Что такое списки?Создание спискаДоступ по индексуПолучение длины спискаДобавление элементовУдаление элементовПроверка, пуст ли списокИтерация по списку12Расширенные функции
Необязательные позиционные параметрыИменованные параметрыОбязательные именованные параметрыЗначения параметров по умолчаниюПовторение - Параметры функций15Проект: Простой калькулятор
НастройкаОбъявление числаПотренируйтесь самостоятельно: Онлайн-компилятор Dart