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:
??
Ç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 a
eşittir b
, ama eğer b
null sonra a
eş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 atamax?.p
- boş farkında erişimx?.m()
- boşa duyarlı yöntem çağrısı?
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;
.
?
, 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'
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.