Dart O'zgarmaslar

O’zgruvchilarning o’ziga xos xususiyatlaridan biri shundaki, kod faylimiz (dastur) ishlashi davomida ularning qiymatini istalgancha tarzda o’zgartira olamiz. Qachonki, oxiriga yetmaguniga qadar dasturimiz.

  void main() {
 var digit = 3;
 print(digit);
 digit = 4;
 print(digit);
 digit = 5;
 print(digit);
}
>>> 3 >>> 4 >>> 5

Agar o’zgaruvchining qiymatini o’zgartirishimiz kerak bo’lmasa, bu kabi holatda o’zgarmas doimiylardan foydalanamiz. Nega? Chunki shunday qiymatlar mavjudki, ularning qiymati standart holatda belgilangan va hech qachon o’zgarmaydi. Masalan, Eyler va Pi sonlarini olishimiz mumkin. Dasturlashda bundan tashqari boshqa holatlarda ham ishlatiladi va bularga o’zingiz faoliyatingiz davomida duch kelasiz.

O’zgarmaslar Dart dasturlash tilida qanday yaratiladi? Buning uchun const va final kabi kalit so’zlardan foydalanashimiz talab etiladi. Agarda siz oldin boshqa dasturlash tillarida const ni ko’rgan bo’lishingiz mumkin, lekin ularda 1 ta edi-ku kalit so’z. Nega Dart dasturlash tilida 2 ta va ularning bir-biridan nima farqi bor ? degan savol paydo bo’lgan bo’lsa, endi shu savolingizga javobni ko’rib o’tamiz.

O’zgarmaslarning qiymatini o’zgartirishga uringan vaqtimizda xatolikka duch kelamiz :

  void main() {
 const digit = 3;
 digit = 4;
 print(digit);
}
Error: Can't assign to the const variable 'digit'.

const va final o’rtasidagi farq shundaki, const qiymati kompilyatsiya vaqtida aniqlanadi. final da esa aksincha, kompilyatsiya bo’lgan dasturimiz tezkor xotirada ishlash vaqtida aniqlanadi. Buni kichik bir misol orqali tushuntirishimiz mumkin.

  void main() {
 final year = DateTime.now().day;
 print(year);
}
>>> 2

DateTime.now().day orqali bugungi kunni olmoqdamiz. Bu qiymatni faqatgina dastur ishlagan vaqtda aniqlab olib, uni o’zgarmas qila olamiz. Keyin boshqa kuni dasturni ishlatgan vaqtimizda bu kun o’zgaradi va yangi qiymatni oladi.

Yuqoridagi kodda final emas, cost orqali foydalanib ishga tushirsak, dastur kompilyatsiya qilinmaganlagi uchun ishlamaydi. const da aniq qiymat boshida berib ketilishi shart.

  void main() {
 const year = DateTime.now().year;
 print(year);
}
Error: Cannot invoke a non-'const' constructor where a const expression is expected. Try using a constructor or factory that is 'const'

O’zgarmaslarni berishda ularning turini ko’rsatish shart emas :

  void main() {
 final pi = 3.14;
 print(pi);
 
 const e = 2.87;
 print(e);
}
>>> 3.14 >>> 2.87