บรรทัดรหัสต่อไปนี้มีเครื่องหมายคำถามสองข้อ:
final myStringList = prefs.getStringList('my_string_list_key') ?? [];
มันหมายความว่าอะไร?
บรรทัดรหัสต่อไปนี้มีเครื่องหมายคำถามสองข้อ:
final myStringList = prefs.getStringList('my_string_list_key') ?? [];
มันหมายความว่าอะไร?
คำตอบ:
ตัว??
ดำเนินการเครื่องหมายคำถามคู่หมายถึง "ถ้าว่าง" ใช้นิพจน์ต่อไปนี้ตัวอย่างเช่น
String a = b ?? 'hello';
วิธีนี้a
เท่ากับb
แต่ถ้าb
เป็นโมฆะแล้วเท่ากับa
'hello'
??=
อีกประการหนึ่งผู้ประกอบการที่เกี่ยวข้อง ตัวอย่างเช่น:
b ??= 'hello';
ซึ่งหมายความว่าถ้าเป็นโมฆะแล้วตั้งเท่ากับb
hello
ไม่งั้นไม่ต้องเปลี่ยน
ข้อมูลอ้างอิง
เงื่อนไข
ข่าวปล่อยโผ 1.12รวมเรียกว่าต่อไปนี้เป็นผู้ประกอบการ null ตระหนักถึง :
??
- ถ้าตัวดำเนินการว่าง??=
- การกำหนดค่าว่างเปล่าx?.p
- การเข้าถึงที่เป็นโมฆะx?.m()
- การเรียกใช้เมธอดที่ทราบค่าว่าง?
String a = b == true ? 'x' : 'y';
ซึ่งโอเปอเรเตอร์ if-null กลายเป็นเพียงชวเลขสำหรับการตรวจสอบค่าว่างที่String a = a == null ? 'hello : a;
เกี่ยวข้อง
?
ใช้สำหรับตัวดำเนินการ ternary แบบเดียวกับใน PHP และมีทางลัดเช่น$a = $b === true ? $b : 'y'
คุณสามารถพิมพ์$a = $b === true ?: 'y'
หรือแทน$a = $b === true ? 'x' : $b
-$a = $b === true ?? 'x'
Dart มีตัวดำเนินการที่มีประโยชน์สำหรับจัดการกับค่าที่อาจเป็นโมฆะ หนึ่งคือตัวดำเนินการ ?? = การกำหนดซึ่งกำหนดค่าให้กับตัวแปรก็ต่อเมื่อตัวแปรนั้นเป็นโมฆะในปัจจุบัน:
int a; // The initial value of a is null.
a ??= 3;
print(a); // <-- Prints 3.
a ??= 5;
print(a); // <-- Still prints 3.
ตัวดำเนินการรู้ค่าว่างอีกตัวคือ ?? ซึ่งส่งคืนนิพจน์ทางด้านซ้ายเว้นแต่ว่าค่าของนิพจน์นั้นจะเป็นโมฆะซึ่งในกรณีนี้จะประเมินและส่งคืนนิพจน์ทางด้านขวา:
print(1 ?? 3); // <-- Prints 1.
print(null ?? 12); // <-- Prints 12.