Dart tiliga kirish O'zgaruvchilar va konstantalar Primitiv ma'lumotlar turlari


Null qiymat, null mumkin bo'lgan turlar va null xavfsizlik


Download 374.15 Kb.
bet5/35
Sana11.05.2023
Hajmi374.15 Kb.
#1454719
1   2   3   4   5   6   7   8   9   ...   35
Bog'liq
3-mustaqil ish

Null qiymat, null mumkin bo'lgan turlar va null xavfsizlik
Dart maxsus konstantaga ega, ya'ni null, bu o'zgaruvchi yoki konstanta aslida hech qanday qiymatga ega emasligini aytadi. Biroq, ushbu konstantadan foydalanganda, 2.12 versiyasidan boshlab Dart sukut bo'yicha null-safety yoki null-safety dan foydalanishini yodda tuting. Bu nimani anglatadi?

Masalan, quyidagi dasturni oling:




1
2
3
4
5
6

void main() {
String name;
print(name);
name = "Tom";
print(name);
}

Bu erda o'zgaruvchi nomi aniqlanganda unga hech qanday qiymat berilmaydi. Va Dart 2.12 dan boshlab, dasturni kompilyatsiya qilishda biz xatoga duch kelamiz:



Xato bizga qiymat berishdan oldin null bo'lmagan o'zgaruvchidan foydalanishga harakat qilayotganimizni bildiradi.


Odatiy bo'lib, barcha ma'lumotlar turlari null bo'lmagan turlar sifatida ko'rib chiqiladi, shuning uchun ularni ishlatishdan oldin ularni o'zgaruvchilar va konstantalarga belgilashga ishonch hosil qilishimiz kerak.




1
2
3
4
5
6

void main() {
String name = "Bob";
print(name);
name = "Tom";
print(name);
}

Operatormi? va null bo'ladigan turlari


Biroq, ba'zi holatlarda siz o'zgaruvchi yoki doimiy qiymatga ega emasligini ko'rsatishingiz kerak bo'lishi mumkin. Ya'ni, u null bo'lishi mumkin bo'lishi kerak. Bu holda biz null bo'ladigan tiplardan foydalanishimiz mumkin.Ular mohiyatan muntazam turlarning ikki barobari bo'lib, ularning o'zgaruvchilari null bo'lishi mumkinligi bundan mustasno.

Turni null (null) deb belgilash uchun operator? (savol belgisi). Masalan:




1
2
3
4
5
6

void main() {
String? name;
print(name);
name = "Tom";
print(name);
}

String turi? uning o'zgaruvchisi satr yoki nullni ifodalashi mumkinligini ko'rsatadi. Va ushbu dasturni bajarishda biz quyidagi konsol natijasini olamiz:

null
Tom

Ushbu turdagi o'zgaruvchilar ham aniq null bilan belgilanishi mumkin:




1
2
3
4
5
6

void main() {
String? name = "Tom";
print(name);
name = null;
print(name);
}

Konsol chiqishi:

Tom
null

Operator ??
Operator ?? o'zgaruvchiga qiymatlarni belgilashda u nullni tekshiradi. Nima uchun kerak? Quyidagi misolni ko'rib chiqing:


1
2
3
4
5
6
7
8
9

void main() {
int? num1 = 23;
int num2 = num1;
print(num2);
num1 = null;
num2 = num1;
print(num2);
}

Bu erda ikkita o'zgaruvchi aniqlangan: num1 va num2. Ularning ikkalasi ham butun sonlarni saqlashi mumkin. Biroq, qo'shimcha ravishda, num1 o'zgaruvchisi nullni ham saqlashi mumkin. Nullni qabul qila olmaydigan num2 o'zgaruvchisiga numni saqlashi mumkin bo'lgan num1 qiymati beriladi. Shunga ko'ra, agar num1 = null bo'lsa, biz potentsial xatolikka duch kelishimiz mumkin.


Ushbu muammoni hal qilish uchun siz ?? operatoridan foydalanishingiz mumkin:




1

value1 ?? value2

Agar qiymat1 (?? operatorining chap tomonidagi qiymat) null bo'lmasa, operator aynan shu qiymatni1 qaytaradi. Agar bu qiymat null bo'lsa, operator ?? qiymat2 qaytaradi (operatorning o'ng tomonida).




1
2
3
4
5
6
7
8
9

void main() {
int? num1 = 23;
int num2 = num1 ?? 0;
print(num2); // 23
num1 = null;
num2 = num1 ?? 0;
print(num2); // 0
}

Birinchi topshiriqda 2-raqamga 1-raqam (23-raqam) qiymati beriladi, chunki 1-raqam null emas. Ikkinchi topshiriqda num2 0 bo'ladi, chunki num1 null.


Konsol chiqishi:

23
0

Operator!


Ba'zi hollarda o'zgaruvchini null turdagi o'zgaruvchi sifatida aniqlash mumkin, ammo bu o'zgaruvchi nullni saqlashini istisno qilish mumkin. Va agar biz ushbu o'zgaruvchi dastur ishlashi davomida nol qiymatni olmasligiga ishonchimiz komil bo'lsa, unda bu holda biz o'zgaruvchining nomidan keyin joylashtirilgan operatorni qabul qilishimiz mumkin:


1
2
3
4
5

void main() {
int? a = 23;
int b = a!; // мы уверены, что a не равна null
print(b); // 23
}

Shu bilan birga, agar bunday ishonch bo'lmasa, unda ushbu operatorni suiiste'mol qilmaslik va undan foydalanmaslik yaxshiroqdir.




Download 374.15 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7   8   9   ...   35




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling