บรรทัดรหัสต่อไปนี้มีเครื่องหมายคำถามสองข้อ:
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.