Nedir ?? Dart'ta çift soru işareti var mı?


96

Aşağıdaki kod satırında iki soru işareti vardır:

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

Anlamı nedir?

Yanıtlar:


192

??Çift soru işareti operatör vasıtası "boş ise". Örneğin aşağıdaki ifadeyi ele alalım.

String a = b ?? 'hello';

Bu araçlar aeşittir b, ama eğer bnull sonra aeşittir 'hello'.

Bir başka ilgili operatör ??=. Örneğin:

b ??= 'hello';

Bu b, null ise eşittir anlamına gelir hello. Aksi takdirde değiştirmeyin.

Referans

Koşullar

Dart 1.12 sürümü haber toplu olarak aşağıda değinilen boş tanıyan operatörler :

  • ?? - boş operatör ise
  • ??= - boş farkındalık atama
  • x?.p - boş farkında erişim
  • x?.m() - boşa duyarlı yöntem çağrısı

3
Neden ilginç? ve değil mi?:, PHP'den gelen biri için oldukça yanıltıcıdır. PHP'de tamamen tersi anlamına gelir.
Vedmant

1
Çünkü muhtemelen @Vedmant ?zaten üçlü operatör tarafından kullanılıyor: String a = b == true ? 'x' : 'y';. Hangi if-null operatörü, gibi üçlü bir boş kontrolün kısaltmasıdır String a = a == null ? 'hello : a;.
Bruno Finger

1
@BrunoFinger ?, PHP'de aynı şekilde üçlü operatör için kullanılır ve $a = $b === true ? $b : 'y'sizin $a = $b === true ?: 'y'yerine veya yerine yazabileceğiniz gibi kısayollar vardır $a = $b === true ? 'x' : $b-$a = $b === true ?? 'x'
Vedmant

3

Dart, boş olabilecek değerlerle başa çıkmak için bazı kullanışlı operatörler sunar. Bunlardan biri, bir değişkene bir değer atayan ancak bu değişken o anda boş ise ?? = atama operatörüdür:

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

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

Başka bir boşa duyarlı operatör ?? , ifadenin değeri boş olmadığı sürece solundaki ifadeyi döndürür; bu durumda sağındaki ifadeyi değerlendirir ve döndürür:

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

Olumlu oy istemek için 2 yıl önce zaten yanıtlanmış bir gönderiyi yanıtladınız mı?
Arthur Rey
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.