Mobil ilovalar ishlab chiqish


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



Download 387,44 Kb.
bet5/34
Sana14.01.2022
Hajmi387,44 Kb.
#363624
1   2   3   4   5   6   7   8   9   ...   34
Bog'liq
Dart tili 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 387,44 Kb.

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




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

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish