Skip to Content
Dart📘 Ngôn ngữ DartNull Safety và Nullable Types

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; // OK

3. Null-aware Operators

3.1. Null-aware access ?.

String? name = "Alice"; print(name?.length); // 5 name = null; print(name?.length); // null

3.2. Null-coalescing ??

String? name = null; String displayName = name ?? "Guest"; print(displayName); // Guest

3.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); // 10

3.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

DartKotlinGhi chú
String?String?Nullable type
name?.lengthname?.lengthSafe access
name ?? "default"name ?: "default"Null-coalescing
name!name!!Null assertion
requiredKhô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 initialization
  • required - Required named parameters
  • Type promotion tự động
Last updated on