Menu
CoddyTech

Ôn tập: hệ thống hồ sơ người dùng

Thuộc phần Lập trình hướng đối tượng trong hành trình Dart của Coddy. Bài học 29 trên 110.

challenge icon

Thử thách

Dễ

Hãy xây dựng một hệ thống hồ sơ người dùng hoàn chỉnh, kết hợp tất cả các khái niệm về an toàn null bạn đã học trong chương này. Bạn sẽ tạo một hệ thống quản lý tài khoản người dùng với một số thông tin bắt buộc và một số thông tin tùy chọn.

Bạn sẽ sắp xếp code trong hai tệp:

  • user_profile.dart: Định nghĩa một lớp UserProfile đại diện cho tài khoản người dùng. Hãy cân nhắc thông tin nào là thiết yếu, chẳng hạn như tên người dùng, và thông tin nào là tùy chọn, chẳng hạn như tiểu sử hoặc số điện thoại. Lớp của bạn cần có:
    • String username không thể null, mọi người dùng đều phải có tên người dùng
    • String email không thể null, mọi người dùng đều phải có email
    • String? displayName có thể null, người dùng có thể muốn hiển thị một tên khác
    • String? bio có thể null, không phải ai cũng viết tiểu sử
    • int? age có thể null, tuổi là thông tin cá nhân tùy chọn
    • Một hàm khởi tạo dùng các tham số có tên, với required cho username và email
    • Một phương thức getDisplayIdentity() trả về tên hiển thị nếu đã được đặt, nếu không thì trả về tên người dùng bằng ??
    • Một phương thức getBioPreview() trả về 20 ký tự đầu tiên của tiểu sử kèm theo ... nếu tiểu sử tồn tại và dài hơn 20 ký tự, toàn bộ tiểu sử nếu có độ dài không quá 20 ký tự, hoặc null nếu không có tiểu sử. Dùng ?. để truy cập an toàn
    • Một phương thức setDefaultBio() chỉ đặt tiểu sử thành 'Hello, I am new here!' nếu hiện tại tiểu sử là null, bằng cách dùng ??=
    • Một phương thức printProfile() hiển thị toàn bộ hồ sơ của người dùng
  • main.dart: Nhập lớp hồ sơ người dùng và tạo một số người dùng để minh họa đầy đủ các tính năng an toàn null:
    • Tạo người dùng có tên người dùng 'alice_dev' và email 'alice@code.com', sau đó đặt tên hiển thị là 'Alice', tiểu sử là 'Software developer passionate about clean code and testing' và tuổi là 28
    • Tạo người dùng có tên người dùng 'bob_builder' và email 'bob@build.io', sau đó chỉ đặt tên hiển thị là 'Bob'
    • Tạo người dùng có tên người dùng 'charlie99' và email 'charlie@mail.net', giữ tất cả các trường tùy chọn ở trạng thái null
    • Gọi setDefaultBio() cho cả ba người dùng
    • Với từng người dùng theo thứ tự, gọi printProfile(), sau đó in ra Identity: [getDisplayIdentity()], rồi in ra Bio preview: [getBioPreview()]

Phương thức printProfile() cần in theo định dạng sau:

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

Lưu ý rằng tiểu sử của Alice không thay đổi sau khi gọi setDefaultBio() vì tiểu sử đã có giá trị, trong khi Charlie được gán tiểu sử mặc định. Cũng hãy quan sát cách phần xem trước tiểu sử rút gọn tiểu sử dài của Alice nhưng hiển thị đầy đủ tiểu sử mặc định ngắn hơn của Charlie.

Kết quả dự kiến:

===== 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!

Tự làm thử

import 'user_profile.dart';

void main() {
  // TODO: Tạo người dùng 'alice_dev' với email 'alice@code.com'
  // Đặt displayName thành 'Alice'
  // Đặt bio thành 'Software developer passionate about clean code and testing'
  // Đặt age thành 28
  
  // TODO: Tạo người dùng 'bob_builder' với email 'bob@build.io'
  // Chỉ đặt displayName thành 'Bob'
  
  // TODO: Tạo người dùng 'charlie99' với email 'charlie@mail.net'
  // Giữ tất cả các trường tùy chọn là null
  
  // TODO: Gọi setDefaultBio() cho cả ba người dùng
  
  // TODO: Với từng người dùng theo thứ tự (alice, bob, charlie):
  // 1. Gọi printProfile()
  // 2. In ra "Identity: [getDisplayIdentity()]"
  // 3. In ra "Bio preview: [getBioPreview()]"
}

Tất cả bài học trong Lập trình hướng đối tượng

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