Menu
CoddyTech

Ôn tập: xử lý null an toàn

Thuộc phần Kiến thức cơ bản trong hành trình Dart của Coddy. Bài học 82 trên 94.

challenge icon

Thử thách

Dễ

Bạn đang xây dựng hệ thống hồ sơ người dùng cho một ứng dụng di động. Hãy tạo lớp UserProfile để thể hiện hiểu biết của bạn về tính năng an toàn null của Dart.

Triển khai lớp UserProfile với các nội dung sau:

  1. Thuộc tính không thể null (luôn phải có giá trị):
    • id có kiểu int
    • createdDate có kiểu String
  2. Thuộc tính có thể null (có thể là null khi khởi tạo):
    • name có kiểu String?
    • email có kiểu String?
    • age có kiểu int?
  3. Thuộc tính khởi tạo trễ:
    • displayName có kiểu String, được khai báo bằng từ khóa late
  4. Hàm khởi tạo:
    • Nhận id và createdDate làm tham số bắt buộc
    • Khởi tạo displayName thành "Guest"
  5. Phương thức: void printProfile() In hồ sơ người dùng theo định dạng sau:

    User Profile:
    ID: <id>
    Created: <createdDate>
    Name: <name or 'Not provided'>
    Email: <email or 'Not provided'>
    Age: <age or 'Not provided'>
    Display Name: <displayName>
    -------------------
  6. Phương thức: void updateEmail(String? newEmail)
    • Cập nhật thuộc tính email bằng giá trị mới.
  7. Phương thức: String getDisplayName()
    • Nếu name không phải là null, gán displayName = name! (bằng toán tử khẳng định không null)
    • Trả về giá trị hiện tại của displayName

Quan trọng: Sau khi cập nhật thuộc tính name, bạn phải gọi getDisplayName() để cập nhật trường displayName trước khi in lại hồ sơ.

Hoàn thiện code để tạo hồ sơ, cập nhật hồ sơ và hiển thị thông tin như trong đầu ra mong đợi.

Tự làm thử

void main() {
  // Tạo hồ sơ người dùng
  final profile = UserProfile(1, 'today');
  
  // In ra hồ sơ ban đầu
  profile.printProfile();
  
  // Cập nhật hồ sơ
  profile.name = 'John Doe';
  profile.updateEmail('john@example.com');
  profile.age = 30;
  
  // Cập nhật tên hiển thị và in ra hồ sơ đã cập nhật
  profile.getDisplayName(); // Gọi phương thức này để cập nhật displayName
  profile.printProfile();
}

class UserProfile {
  // TODO: Thêm các thuộc tính (id, createdDate, name, email, age, displayName)
  
  // TODO: Tạo hàm khởi tạo
  
  // TODO: Triển khai phương thức printProfile()
  
  // TODO: Triển khai phương thức updateEmail()
  
  // TODO: Triển khai phương thức getDisplayName()
}

Tất cả bài học trong Kiến thức cơ bản

Tự luyện tập: Trình biên dịch Dart online