Skip to Content
Dart📘 Ngôn ngữ DartNull-aware Operators

Null-aware Operators trong Dart

1. Giới thiệu

Dart cung cấp các operators đặc biệt để làm việc an toàn với giá trị nullable.

2. Null-aware access (?.)

void main() { String? name; // Thay vì int? length = name != null ? name.length : null; // Dùng ?. int? length2 = name?.length; // null name = 'Dart'; print(name?.length); // 4 }

3. Null coalescing (??)

void main() { String? name; // Giá trị mặc định nếu null String displayName = name ?? 'Guest'; print(displayName); // Guest // Chained String? firstName; String? lastName; String display = firstName ?? lastName ?? 'Unknown'; }

4. Null-aware assignment (??=)

void main() { String? name; // Gán chỉ khi null name ??= 'Default'; print(name); // Default name ??= 'Another'; // Không gán vì không còn null print(name); // Default }

5. Null assertion (!)

void main() { String? name = getName(); // Khẳng định không null print(name!.toUpperCase()); // Ném exception nếu null } String? getName() => 'Dart';

6. Cascade với null-aware (?..)

class Person { String name = ''; int age = 0; } void main() { Person? person; // Cascade chỉ khi không null person ?..name = 'Alice' ..age = 25; print(person); // null (không có gì xảy ra) }

7. late Keyword

class User { late String name; // Sẽ khởi tạo sau void init(String n) { name = n; } } void main() { var user = User(); user.init('Bob'); print(user.name); // Bob }

8. Collection null-aware

void main() { List<int>? numbers; // Spread với null-aware var list = [0, ...?numbers, 5]; print(list); // [0, 5] numbers = [1, 2, 3]; var list2 = [0, ...?numbers, 5]; print(list2); // [0, 1, 2, 3, 5] }

9. Kết hợp nhiều operators

class Address { String? city; } class Person { Address? address; } void main() { Person? person; // Chain null-aware operators String city = person?.address?.city ?? 'Unknown'; print(city); // Unknown }

10. Index null-aware (?[])

void main() { List<int>? numbers; // Null-aware index access int? first = numbers?[0]; print(first); // null numbers = [1, 2, 3]; print(numbers?[0]); // 1 }

📝 Tóm tắt

OperatorMục đíchVí dụ
?.Access an toànname?.length
??Giá trị mặc địnhname ?? 'Guest'
??=Gán nếu nullname ??= 'Default'
!Assert non-nullname!.toUpperCase()
?..Cascade an toànperson?..name = 'A'
?[]Index an toànlist?[0]
Last updated on