Menu
Coddy logo textTech

Итоги — Система профилей пользователей

Часть раздела Объектно-ориентированное программирование путешествия по Dart на Coddy — урок 29 из 110.

challenge icon

Задание

Легко

Давайте создадим полноценную систему профилей пользователей, которая объединит все концепции безопасности null (null safety), которые вы изучили в этой главе. Вы создадите систему, управляющую учетными записями пользователей с сочетанием обязательной информации и необязательных деталей.

Вы организуете свой код в два файла:

  • user_profile.dart: Определите класс UserProfile, который представляет учетную запись пользователя. Подумайте о том, какая информация является обязательной (например, имя пользователя), а какая — необязательной (например, биография или номер телефона). Ваш класс должен содержать:
    • Не допускающее null поле String username — у каждого пользователя должно быть имя пользователя
    • Не допускающее null поле String email — у каждого пользователя должен быть адрес электронной почты
    • Допускающее null поле String? displayName — пользователи могут предпочесть отображать другое имя
    • Допускающее null поле String? bio — не все пишут биографию
    • Допускающее null поле int? age — возраст является необязательной личной информацией
    • Конструктор, использующий именованные параметры с ключевым словом required для username и email
    • Метод getDisplayIdentity(), который возвращает отображаемое имя, если оно задано, в противном случае возвращает имя пользователя, используя оператор ??
    • Метод getBioPreview(), который возвращает первые 20 символов биографии, за которыми следует ..., если биография существует и длиннее 20 символов; полную биографию, если в ней 20 символов или меньше; или null, если биография отсутствует (используйте ?. для безопасного доступа)
    • Метод setDefaultBio(), который устанавливает биографию в значение 'Hello, I am new here!' только если она в данный момент равна null, используя оператор ??=
    • Метод printProfile(), который отображает полный профиль пользователя
  • main.dart: Импортируйте ваш класс профиля пользователя и создайте несколько пользователей, чтобы продемонстрировать весь спектр функций безопасности null:
    • Создайте пользователя с именем пользователя 'alice_dev' и электронной почтой 'alice@code.com', затем установите отображаемое имя 'Alice', биографию 'Software developer passionate about clean code and testing' и возраст 28
    • Создайте пользователя с именем пользователя 'bob_builder' и электронной почтой 'bob@build.io', затем установите только отображаемое имя 'Bob'
    • Создайте пользователя с именем пользователя 'charlie99' и электронной почтой 'charlie@mail.net' (оставьте все необязательные поля как null)
    • Вызовите setDefaultBio() для всех трех пользователей
    • Для каждого пользователя по порядку вызовите printProfile(), затем выведите Identity: [getDisplayIdentity()], а затем выведите Bio preview: [getBioPreview()]

Метод printProfile() должен выводить данные в следующем формате:

===== User Profile =====
Username: [username]
Email: [email]
Display Name: [displayName or "Not set"]
Bio: [bio or "No bio"]
Age: [age or "Not specified"]

Обратите внимание, как биография Алисы остается неизменной после вызова setDefaultBio(), потому что у нее уже есть значение, в то время как Чарли получает назначенную биографию по умолчанию. Также обратите внимание, как предварительный просмотр биографии обрезает длинную биографию Алисы, но полностью показывает более короткую биографию Чарли, заданную по умолчанию.

Ожидаемый вывод:

===== User Profile =====
Username: alice_dev
Email: alice@code.com
Display Name: Alice
Bio: Software developer passionate about clean code and testing
Age: 28
Identity: Alice
Bio preview: Software developer p...
===== User Profile =====
Username: bob_builder
Email: bob@build.io
Display Name: Bob
Bio: Hello, I am new here!
Age: Not specified
Identity: Bob
Bio preview: Hello, I am new here!
===== User Profile =====
Username: charlie99
Email: charlie@mail.net
Display Name: Not set
Bio: Hello, I am new here!
Age: Not specified
Identity: charlie99
Bio preview: Hello, I am new here!

Попробуйте сами

import 'user_profile.dart';

void main() {
  // TODO: Создайте пользователя 'alice_dev' с email 'alice@code.com'
  // Установите displayName в 'Alice'
  // Установите bio в 'Software developer passionate about clean code and testing'
  // Установите age в 28
  
  // TODO: Создайте пользователя 'bob_builder' с email 'bob@build.io'
  // Установите только displayName в 'Bob'
  
  // TODO: Создайте пользователя 'charlie99' с email 'charlie@mail.net'
  // Оставьте все необязательные поля как null
  
  // TODO: Вызовите setDefaultBio() для всех трех пользователей
  
  // TODO: Для каждого пользователя по порядку (alice, bob, charlie):
  // 1. Вызовите printProfile()
  // 2. Выведите "Identity: [getDisplayIdentity()]"
  // 3. Выведите "Bio preview: [getBioPreview()]"
}

Все уроки раздела Объектно-ориентированное программирование