무엇입니까 ?? Dart에서 이중 물음표?


96

다음 코드 줄에는 두 개의 물음표가 있습니다.

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

무엇을 의미 하는가?

답변:


194

??이중 물음표 운영자 수단 "경우는 null". 예를 들어 다음 식을 사용하십시오.

String a = b ?? 'hello';

이것은 a같음을 의미 b하지만, 만약 bnull이면 a같음 'hello'.

또 다른 관련 연산자는 ??=입니다. 예를 들면 :

b ??= 'hello';

즉, b이 null이면으로 설정합니다 hello. 그렇지 않으면 변경하지 마십시오.

참고

자귀

다트 1.12 릴리스 뉴스 집합으로 다음과 같은 언급 널 인식 운영자 :

  • ?? -null 연산자 인 경우
  • ??= -널 인식 할당
  • x?.p -널 인식 액세스
  • x?.m() -널 인식 메서드 호출

3
흥미로운 이유는 ?? 및? :, PHP에서 온 사람에게는 오해의 소지가 있습니다. PHP에서는 완전히 반대입니다.
Vedmant

1
@Vedmant는 아마도 ?삼항 연산자 : String a = b == true ? 'x' : 'y';. if-null 연산자는 같은 삼항 null 검사의 약자로 판명되었습니다 String a = a == null ? 'hello : a;.
브루노 손가락

1
@BrunoFinger는 ?삼항 연산자에 대한 PHP에서 같은 방법을 사용하고, 대신에 바로 가기를 원하는가되어 $a = $b === true ? $b : 'y'당신이 입력 할 수 있습니다 $a = $b === true ?: 'y'대신 또는 $a = $b === true ? 'x' : $b-$a = $b === true ?? 'x'
Vedmant

3

Dart는 null 일 수있는 값을 처리하기위한 몇 가지 편리한 연산자를 제공합니다. 하나는 ?? = 할당 연산자로, 해당 변수가 현재 null 인 경우에만 변수에 값을 할당합니다.

int a; // The initial value of a is null.
a ??= 3;
print(a); // <-- Prints 3.

a ??= 5;
print(a); // <-- Still prints 3.

또 다른 널 인식 연산자는 ?? , 표현식의 값이 null이 아닌 경우 왼쪽에 표현식을 반환합니다.이 경우 오른쪽에 표현식을 평가하고 반환합니다.

print(1 ?? 3); // <-- Prints 1.
print(null ?? 12); // <-- Prints 12.

2 년 전에 이미 답변 한 게시물에 찬성 투표를 요청 했습니까?
Arthur Rey
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.