Sobes.tech
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:

    • final bajarilish vaqtida (runtime) birinchi murojaatdan so'ng boshlanadi.
    • const kompilyatsiya vaqtida (compile-time) boshlanadi.
  • Qiymat turi:

    • final o'zgaruvchi bajarilish vaqtida hisoblangan qiymatni saqlashi mumkin.
    • const o'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