Junior
Dart tilida final va const kalit so'zlarining farqi nima?
sobes.tech AI
AIdan javob
final va const o'zgaruvchilarni yaratish uchun ishlatiladi, ularning qiymatlari boshlang'ichdan keyin o'zgartirilmaydi.
Asosiy farqlar:
-
Boshlanish vaqti:
finalbajarilish vaqtida (runtime) birinchi murojaatdan so'ng boshlanadi.constkompilyatsiya vaqtida (compile-time) boshlanadi.
-
Qiymat turi:
finalo'zgaruvchi bajarilish vaqtida hisoblangan qiymatni saqlashi mumkin.consto'zgaruvchi kompilyatsiya vaqtida hisoblanadigan qiymatni saqlashi kerak (literallar, doimiy ifodalar natijasi).
-
Doimiylik:
final: O'zgaruvchi doimiy, lekin unga murojaat qiladigan (agar ob'ekt bo'lsa) qiymat o'zgartirilishi mumkin.const: O'zgaruvchi doimiy, va unga murojaat qiladigan qiymat ham doimiy bo'lishi kerak (o'zgarmas).
Misollar:
// final - bajarilish vaqtida boshlanadi
final DateTime now = DateTime.now(); // Qiymat faqat bajarilish vaqtida ma'lum
// const - kompilyatsiya vaqtida boshlanadi
const double pi = 3.14; // Qiymat kompilyatsiya bosqichida ma'lum
// Listlar va xaritalarda const ishlatish ularni o'zgarmas qiladi
const List<int> constantList = [1, 2, 3];
// constantList[0] = 10; // Xato! List o'zgarmas
// Listlar va xaritalarda final ishlatish o'zgaruvchini o'zgarmas qiladi,
// lekin ob'ektning mazmuni o'zgartirilishi mumkin (agar ob'ekt o'zgarmas bo'lmasa)
final List<int> finalList = [1, 2, 3];
finalList[0] = 10; // Ruxsat etilgan, chunki list o'zgarmas emas
// doimiy qiymat bilan final
final int a = 5; // Mumkin, lekin `const` ko'proq mos keladi
| Boshlanish vaqti | Qiymat talablariga | Ob'ektning o'zgartirilishi (agar ob'ektga murojaat qilinsa) | |
|---|---|---|---|
final |
Bajarilish vaqtida | Bajarilish vaqtida hisoblanishi mumkin | O'zgartirilishi mumkin, agar ob'ekt o'zgarmas bo'lsa |
const |
Kompilyatsiya vaqtida | Kompilyatsiya vaqtida ma'lum bo'lishi kerak | O'zgarmas bo'lishi kerak |