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 |
Дар вақти компиляция | Бояд дар вақти компиляция маълум бошад | Бояд бебозгашт бошад |