내지도에서 이중 조회를 피하기 위해 다음과 같은 형식의 할당 및 null 검사가 있습니다.
Dart에서 이것을 수행하는 더 나은 또는 더 관용적 인 방법이 있습니까?
bool isConnected(a, b){
List list;
return (
((list = outgoing[a]) != null && list.contains(b)) ||
((list = incoming[a]) != null && list.contains(b))
);
}
답변
Dart 1.12부터는 다음과 같은 상황에서 null 인식 연산자를 사용할 수 있습니다.
bool isConnected(a, b) {
bool outConn = outgoing[a]?.contains(b) ?? false;
bool inConn = incoming[a]?.contains(b) ?? false;
return outConn || inConn;
}
?.
왼쪽가 널, 널 및 경우에 운전자 쇼트 ??
가 널이 아니며, 우측 그렇지 경우 작업자가 좌측을 반환한다.
진술
outgoing[a]?.contains(b)
따라서 null
if outgoing[a]
is로 평가 null
되거나 그렇지 않으면 부울 결과로 평가됩니다 contains(b)
.
즉, 결과 문은 다음 중 하나가됩니다.
bool outConn = null ?? false; // false
bool outConn = false ?? false; // false
bool outConn = true ?? false; // true
inConn
부울 에도 동일하게 적용됩니다. 즉, inConn
및 둘 다 outConn
null이 아닌 것이 보장되므로 둘 다 결과를 반환 할 수 있습니다 ||
.
답변
이제 4 개의 널 인식 연산자가 있습니다.
?? 제목이 null 인 경우 기본값을 제공합니다.
return subject ?? "defaultIfNull";
?? = 제목이 null 인 경우에만 제목을 기본값으로 설정합니다.
이것은 ?? 그러나 null 인 경우 주제 변수를 기본값으로 설정합니다.
subject ??= "defaultIfNull";
?. 주체의 속성에 액세스 할 때 주체가 null이면 예외를 피하십시오.
object?.x
객체가 null이면 null을 반환 object.x
하고, 객체가 null이면 예외를 발생시킵니다.
…? 스프레드 컬렉션에서 제목 목록이 null 인 경우 최종 목록에서 null 항목을 피하십시오.
다음의 결과
[
...[1, 2],
null,
]
이다 [1, 2, null]
null 값을 사용하지 않으려면 …?
var resultingList = [
...[1, 2],
...?subjectList,
];
답변
제목을 검색하여 여기에 올 때 다음을 게시합니다.
https://github.com/dart-lang/sdk/issues/66에 따라 “Dart null 검사 관용구 또는 모범 사례는 무엇입니까?”에 대한 대답 인 것 같습니다. is :
일반적인 경우에는 null 검사 관용구 또는 모범 사례가 없습니다. 널 인식 연산자가 귀하의 경우에 맞지 않으면 if (object == null)
또는 에서와 같이 직접 비교를 사용하십시오 if (object != null)
.
답변
bool ok<T>(T obj) => obj != null;
bool nul<T>(T obj) => obj == null;