Là những gì ?? dấu hỏi kép trong Dart?


86

Dòng mã sau có hai dấu chấm hỏi:

final myStringList = prefs.getStringList('my_string_list_key') ?? [];

Nghĩa là gì?

Câu trả lời:


174

Các ??phương tiện điều hành dấu hỏi kép "nếu null". Lấy ví dụ biểu thức sau.

String a = b ?? 'hello';

Điều này có nghĩa là abằng b, nhưng nếu blà null thì abằng'hello' .

Một toán tử khác có liên quan là ??=. Ví dụ:

b ??= 'hello';

Điều này có nghĩa là nếu blà null thì đặt nó bằng hello. Nếu không, đừng thay đổi nó.

Tài liệu tham khảo

Điều kiện

Các Dart 1.12 phát hành tin tức gọi chung sau khi các nhà khai thác vô-aware :

  • ?? - toán tử if null
  • ??= - nhiệm vụ không biết
  • x?.p - quyền truy cập vô hiệu
  • x?.m() - lệnh gọi phương thức nhận biết null

3
Thú vị tại sao nó ?? và không ?:, nó khá dễ gây hiểu lầm cho một người đến từ PHP, như ?? trong PHP có nghĩa là hoàn toàn ngược lại.
Vedmant

1
@Vedmant có lẽ vì ?đang được sử dụng bởi các nhà điều hành ternary: String a = b == true ? 'x' : 'y';. Toán tử if-null hóa ra chỉ là một cách viết tắt cho phép kiểm tra null bậc ba như thế nào String a = a == null ? 'hello : a;.
Bruno Finger

1
@BrunoFinger ?được sử dụng để điều hành ternary theo cùng một cách trong PHP, và có các phím tắt thích thay vì $a = $b === true ? $b : 'y'bạn có thể gõ $a = $b === true ?: 'y'hoặc thay thế $a = $b === true ? 'x' : $b-$a = $b === true ?? 'x'
Vedmant

|| imo sẽ rõ ràng hơn
Ced
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.