Ba’zida o’zgaruvchilar uchun hech qanday qiymat bermay ketishga ehtiyoj bo’ladi yoki uning qiymati mavjudligini biz aniq ayta olmaymiz. Birinchi holat uchun ko’rib o’tadigan bo’lsak, buning uchun bir qancha dasturlash tillarida mavjud bo’lgani kabi Dart dasturlash tilida ham null qiymati mavjud. Bu o’zgaruvchining hech qanday qiymati yo’qligini bildiradi. Dart 2.12 versiyasidan boshlab, o’zgaruvchilarga hech qanday qiymat bermay ketish imkoniyati va shu holatda uning qiymati null qilib olinadigan bo’ldi. Undan oldingi versiyalarda esa o’zgaruvchiga aniq qiymat berilishi kerak edi.
void main() {
var number;
print(number);
}
Oldingi holatda bu xatolikni bartaraf etish va inobatga olib ketish uchun ? operatori qo’llanilgan va hozir ham bu operatordan qo’llaniladi ba’zi bir vaziyatlarda.
void main() {
String? name;
print(name);
}
?? operatori
Bu operator o’zgaruvchiga qiymatni belgilashda uni null likka tekshiradi. Bu nima uchun? Quyidagi misolni ko’ramiz:
void main() {
String name;
String name1 = name;
print(name1);
}
Ushbu kod ishga tushirilgan vaqtda xatolikka duch kelamiz. Bu xatolik qiymatsiz o’zgaruvchini boshqa bir o’zgaruvchiga belgilash vaqtida yuzaga keldi. Aynan mana shu xatoliklarni bartaraf etish uchun ham ?? operatori ishlatiladi. Bu operator o’zgaruvchini null qiymatligini tekshiradi va shunday bo’lsa, uning o’rniga boshqa qiymatni olib ketadi belgilangan. Sintaksis :
qiymat1 ?? qiymat2– qiymat1 qiymati null bo’lsa, qiymat2ni aks holda qiymat1 o’zini olib ketadi.
void main() {
String? name;
String name1 = name ?? "uzbekdevs";
print(name1);
}
Hozirda name o’zgaruvchisi qiymati null va u name1 o’zgaruvchisiga tayinlandi. Bunda name ?? “uzbekdevs” ifodasidagi name o’zgaruvchisi qiymati null bo’lgani uchun ham ?? Operatoridan keyin berilgan qiymatni oladi va name1 o’zgaruvchisi qiymati “uzbekdevs” ga teng bo’ladi.
Yana bir misol, butun turdagi o’zgaruvchi va uning qiymati null ga teng. Shunda uni tekshirib qiymatini 0 ga o’zgartirib keta olamiz.
void main() {
int? son;
son = son ?? 0;
print(son);
}
Bu operatorni ikki son yig’indisini hisoblovchi funksiyada ishlatsak, bu funksiyaga hech qanday qiymatsiz o’zgaruvchini olgan vaqtda ulardagi qiymatlar yig’indisini hisoblashda xatolik chiqadi.
void main() {
int x =5, y;
print(yigindi(x, y));
}
int yigindi(int a, int b) {
return a + b;
}
Shunday holatlar uchun biz kodimizda xato chiqmasligini oldini olishimiz kerak va funksiya parametrlariga ? Operatorini berib ketishimiz kerak. Bu esa null qiymatli o’zgaruvchini qabul qilish imkonini yaratadi.
void main() {
int x = 5;
int? y;
print(yigindi(x, y));
}
int yigindi(int? a, int? b) {
return (a ?? 0)+ (b ?? 0);
}
a va b parametrlaridan qaysidir biriga yoki ikkisiga ham null qiymat yuborilsa, 0 qiymatga o’zgartirib oladi.
! – null tasdiqlash operatori. Bu operator o’zgaruvchi aniq null qiymatga ega emasligini bilganimizda begilab qo’yish uchun ishlatiladi. Nega? Chunki kompyuter bu haqida oldindan ma’lumotga ega bo’lmaydi. Biz esa buni bilamiz.
void main() {
int x = 5;
int y = 4;
print(yigindi(x, y));
}
int yigindi(int a, int b) {
return a!+ b!;
}
?. – operatori ayrim turlarda yaratilgan o’zgaruvchi (obyekt) xususiyat va funksiyalariga kirishni ta’minlaydi null qiymatga ega bo’lmasa.
void main() {
int? number;
print(number?.isNegative);
}
number o’zgaruvchisining manfiy sonligi tekshirilganda isNegative xususiayati orqali ?. operatori ishlatilmasa null qiymatni tekshirmaydi va bu haqida xato ham beradi. Agarda bu operatordan foydalanilsa qiymat null bo’lsa, null ni aks holda manfiyligini tekshirib bool qiymatida natija qaytaradi.