Tính đến Dart 1.12 nhà khai thác vô-aware có sẵn cho loại tình huống:
bool isConnected(a, b) {
bool outConn = outgoing[a]?.contains(b) ?? false;
bool inConn = incoming[a]?.contains(b) ?? false;
return outConn || inConn;
}
Các ?.
điều hành ngắn mạch null nếu phía bên tay trái là null, và ??
toán tử trả về phía bên trái nếu nó không phải là null, và phía bên tay phải ngược lại.
Tuyên bố
outgoing[a]?.contains(b)
sẽ do một trong hai đánh giá để null
nếu outgoing[a]
là null
, hoặc kết quả boolean của contains(b)
nếu nó không phải là.
đó có nghĩa là tuyên bố kết quả sẽ là một trong những điều sau đây:
bool outConn = null ?? false; // false
bool outConn = false ?? false; // false
bool outConn = true ?? false; // true
Cùng áp dụng cho inConn
boolean, có nghĩa là cả hai inConn
và outConn
có bảo đảm là không null, cho phép chúng tôi trở lại kết quả của ||
nhập hai.
Nguồn
2013-06-09 06:13:38
Viết 'outgoing [a] ?. chứa (b)' là nguy hiểm, ít nhất với ngữ nghĩa Groovy, bởi vì khi 'outgoing' là' null', toàn bộ biểu thức ước lượng thành 'null'. Vì vậy, bạn có thể trong thực tế nhận được một cái gì đó giống như 'return (null || true)', mà sẽ ném trong chế độ kiểm tra. – Ladicek
Cảm ơn bạn đã liên kết vấn đề mở. – z5h
@Ladicek Cảm ơn bạn đã chỉ ra điều đó. Tôi đã kết hợp toán tử kết hợp null ('??') vào câu trả lời được cập nhật của tôi để giải thích cho vấn đề đó. –