Ô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.
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:
- Thuộc tính không thể null (luôn phải có giá trị):
idcó kiểuintcreatedDatecó kiểuString
- Thuộc tính có thể null (có thể là null khi khởi tạo):
namecó kiểuString?emailcó kiểuString?agecó kiểuint?
- Thuộc tính khởi tạo trễ:
displayNamecó kiểuString, được khai báo bằng từ khóalate
- Hàm khởi tạo:
- Nhận
idvàcreatedDatelàm tham số bắt buộc - Khởi tạo
displayNamethành"Guest"
- Nhận
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> -------------------- Phương thức:
void updateEmail(String? newEmail)- Cập nhật thuộc tính
emailbằng giá trị mới.
- Cập nhật thuộc tính
- Phương thức:
String getDisplayName()- Nếu
namekhông phải là null, gándisplayName = name!(bằng toán tử khẳng định không null) - Trả về giá trị hiện tại của
displayName
- Nếu
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
4Các toán tử phần 2
Toán tử so sánhPhép AND logicPhép OR logicPhép NOT logicToán tử kiểm tra kiểuÔn tập: So sánh10Bộ sưu tập: kiến thức cơ bản về ánh xạ
Ánh xạ là gì?Tạo ánh xạTruy cập giá trị bằng khóaCặp khóa và giá trịLấy kích thước ánh xạLấy các khóaLấy các giá trịKiểm tra khóa có tồn tại không13An toàn với giá trị null chuyên sâu
Tìm hiểu giá trị nullKiểu dữ liệu nullableKiểu dữ liệu non-nullableToán tử khẳng định non-nullKhởi tạo muộnÔn tập: xử lý null an toàn16Thử thách về kiến thức cơ bản
Thử thách: Danh sách phép tínhThử thách: Tính tổng các sốThử thách: Tìm tích2Biến và kiểu dữ liệu cơ bản
Biến là gì?ChuỗiSố nguyên (int)Số thực (double)Giá trị logic (bool)Suy luận kiểu dữ liệu với 'var'Biến finalBiến hằng sốQuy tắc đặt tênAn toàn với null cơ bảnÔn tập: khai báo biến8Luồng điều khiển: vòng lặp
Vòng lặp forVòng lặp whileVòng lặp do-whileDùng break trong vòng lặpDùng continue trong vòng lặpÔn tập: lặp lại code11Hàm cơ bản
Hàm là gì?Định nghĩa hàm cơ bảnGọi hàmHàm có tham sốHàm trả về giá trịTừ khóa 'void'Cú pháp mũi tênÔn tập: hàm đơn giản14Chuyển đổi kiểu dữ liệu
Chuyển chuỗi thành số nguyênChuyển chuỗi thành số thựcChuyển số thành chuỗiXử lý lỗi chuyển đổi3Các toán tử, phần 1
Toán tử số họcPhép chia số nguyênToán tử moduloToán tử tăng và giảmToán tử gán rút gọnÔn tập: phép tính đơn giản6Luồng điều khiển: ra quyết định
Câu lệnh 'if'Câu lệnh 'else'Câu lệnh 'else if'Ôn tập: quyết định đơn giảnCâu lệnh 'if' lồng nhauCâu lệnh 'switch'9Cơ bản về danh sách trong Collections
Danh sách là gì?Tạo danh sáchTruy cập theo chỉ sốLấy độ dài danh sáchThêm phần tửXóa phần tửKiểm tra danh sách có rỗng khôngDuyệt qua danh sáchTự luyện tập: Trình biên dịch Dart online