Sobes.tech
Junior

Таврии калидвожаҳои final ва const дар Dart чӣ фарқ доранд?

sobes.tech AI

Ҷавоб аз AI

final ва const истифода мешаванд барои эҷоди тағйирёбандаҳо, ки пас аз оғозёбӣ тағйир дода намешаванд.

Асосӣ фарқиятҳо:

  • Вақти оғозёбӣ:

    • final дар вақти иҷро (runtime) дар вақти аввалин муроҷиат оғоз мешавад.
    • const дар вақти компиляция (compile-time) оғоз мешавад.
  • Намуди арзишҳо:

    • final тағйирёбанда метавонад арзише дошта бошад, ки дар вақти иҷро ҳисоб карда мешавад.
    • const тағйирёбанда бояд арзише дошта бошад, ки дар вақти компиляция ҳисоб карда мешавад (литералҳо, натиҷаи изҳороти константӣ).
  • Константнокӣ:

    • final: Тағйирёбанда константӣ аст, аммо арзише, ки ба он ишора мекунад (агар ин объект бошад), метавонад тағйирёбанда бошад.
    • const: Тағйирёбанда константӣ аст, ва арзише, ки ба он ишора мекунад, низ бояд константӣ (бебозгашт) бошад.

Маслиҳатҳо:

// final - дар вақти иҷроёбӣ оғоз мешавад
final DateTime now = DateTime.now(); // Арзиш танҳо дар runtime маълум аст

// const - дар вақти компиляция оғоз мешавад
const double pi = 3.14; // Арзиш дар марҳилаи компиляция маълум аст

// Истифодаи const барои рӯйхатҳо ва харитаҳо онҳоро бебозгашт мекунад
const List<int> constantList = [1, 2, 3];
// constantList[0] = 10; // Хатогӣ! Рӯйхат бебозгашт аст

// Истифодаи final барои рӯйхатҳо ва харитаҳо тағйирнопазирии тағйирёбандаҳоро таъмин мекунад,
// аммо мундариҷаи объект метавонад тағйир ёбад (агар объект тағйирёбанда бошад)
final List<int> finalList = [1, 2, 3];
finalList[0] = 10; // иҷозат дода шудааст, зеро самои List тағйирёбанда аст

// final бо арзиши константӣ
final int a = 5; // мумкин аст, аммо const бештар мувофиқ аст
Вақти оғозёбӣ Талабот ба арзиш Мутабель будани объект (агар ба объект ишора мекунад)
final Дар вақти иҷроёбӣ Мумкин аст дар вақти иҷро ҳисоб карда шавад Мумкин аст тағйирёбанда бошад, агар объект тағйирёбанда бошад
const Дар вақти компиляция Бояд дар вақти компиляция маълум бошад Бояд бебозгашт бошад