[dart] Dart null 검사 관용구 또는 모범 사례는 무엇입니까?

내지도에서 이중 조회를 피하기 위해 다음과 같은 형식의 할당 및 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)

따라서 nullif outgoing[a]is로 평가 null되거나 그렇지 않으면 부울 결과로 평가됩니다 contains(b).

즉, 결과 문은 다음 중 하나가됩니다.

bool outConn = null ?? false; // false
bool outConn = false ?? false; // false
bool outConn = true ?? false; // true

inConn부울 에도 동일하게 적용됩니다. 즉, inConn및 둘 다 outConnnull이 아닌 것이 보장되므로 둘 다 결과를 반환 할 수 있습니다 ||.


답변

이제 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;


답변