An toàn với null cơ bả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 14 trên 94.
Tính an toàn với null giúp ngăn ứng dụng gặp sự cố bất ngờ bằng cách kiểm soát những biến nào có thể để trống (null).
Theo mặc định, biến phải chứa một giá trị:
void main() {
String name = 'Dart';
print(name); // Đầu ra: Dart
// Điều này sẽ gây ra lỗi:
// name = null; // Không được phép
}Thêm ? sau kiểu dữ liệu để cho phép giá trị null:
void main() {
String? name = 'Dart';
print(name); // In ra: Dart
// Bây giờ ta có thể gán null
name = null;
print(name); // In ra: null
}Bạn có thể khai báo biến có thể nhận giá trị null với bất kỳ kiểu dữ liệu nào:
void main() {
int? age; // Chưa có giá trị ban đầu, mặc định là null
double? price = 19.99;
bool? isAvailable = true;
print(age); // In ra: null
print(price); // In ra: 19.99
print(isAvailable); // In ra: true
// Chúng ta có thể đổi bất kỳ giá trị nào trong số này thành null
price = null;
isAvailable = null;
}
Tính an toàn null (null safety) giúp bảo vệ ứng dụng khỏi những sự cố bất ngờ xảy ra khi code cố sử dụng giá trị null trong các phép toán.
Thử thách
Người mớiTạo một chương trình Dart minh họa tính an toàn null cơ bản bằng toán tử ?:
- Khai báo một biến String tên là
usernamevà gán giá trịnullcho biến bằng toán tử an toàn null?(String?) - Khai báo một biến int tên là
userAgevà gán giá trịnullcho biến bằng toán tử an toàn null - In cả hai biến kèm nhãn theo CHÍNH XÁC định dạng sau:
Username: null
User age: nullSau đó:
- Gán giá trị
"DartLearner"cho biếnusername - Gán giá trị
25cho biếnuserAge - In lại cả hai biến theo CHÍNH XÁC định dạng như trước
Đầu ra của bạn phải khớp chính xác với định dạng ở trên.
Tự làm thử
void main() {
// Khai báo các biến (variable) có thể nhận giá trị null ở đây
String? username = ?;
int? userAge = ?;
// In các giá trị (value) ban đầu kèm nhãn
print("Username: " + username.toString());
print("User age: " + userAge.toString());
// Gán giá trị mới cho các biến
username = ?;
userAge = ?;
// In các giá trị đã cập nhật với cùng nhãn
print("Username: " + username.toString());
print("User age: " + userAge.toString());
}Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
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