Null Safety trong Dart
1. Giới thiệu
Dart có Sound Null Safety, tương tự Kotlin và Swift. Mặc định, biến không thể null:
String name = "Dart";
// name = null; // Error!2. Nullable Types
Thêm ? để cho phép null:
String? name = "Alice";
name = null; // OK
int? age = 25;
age = null; // OK3. Null-aware Operators
3.1. Null-aware access ?.
String? name = "Alice";
print(name?.length); // 5
name = null;
print(name?.length); // null3.2. Null-coalescing ??
String? name = null;
String displayName = name ?? "Guest";
print(displayName); // Guest3.3. Null-aware assignment ??=
int? value;
value ??= 10; // Gán nếu null
print(value); // 10
value ??= 20; // Không gán vì đã có giá trị
print(value); // 103.4. Null assertion !
Cảnh báo: Gây runtime error nếu null!
String? name = "Alice";
print(name!.length); // 5
name = null;
// print(name!.length); // Runtime error!4. Type Promotion
Dart tự động promote type sau khi kiểm tra null:
String? name = "Alice";
if (name != null) {
// Trong block này, name là String (non-null)
print(name.length); // OK, không cần !
}5. Late Variables
late String description;
void initialize() {
description = "Initialized";
}
void use() {
print(description); // Phải gọi initialize() trước
}6. Required Parameters
class User {
final String name;
final int age;
User({required this.name, required this.age});
}
// Must provide name and age
var user = User(name: "Alice", age: 25);7. Null Safety với Collections
// List không null, chứa phần tử không null
List<String> names = ["Alice", "Bob"];
// List không null, chứa phần tử nullable
List<String?> nullableNames = ["Alice", null, "Bob"];
// List nullable
List<String>? maybeNames = null;
// List nullable, chứa phần tử nullable
List<String?>? maybeNullableNames = null;8. So sánh với Kotlin
| Dart | Kotlin | Ghi chú |
|---|---|---|
String? | String? | Nullable type |
name?.length | name?.length | Safe access |
name ?? "default" | name ?: "default" | Null-coalescing |
name! | name!! | Null assertion |
required | Không có | Named parameter |
📝 Tóm tắt
Type?- Nullable type?.- Safe access??- Null-coalescing (default value)??=- Null-aware assignment!- Null assertion (nguy hiểm!)late- Late initializationrequired- Required named parameters- Type promotion tự động
Last updated on