Sobes.tech
Junior

Dartта final жана const ачкыч сөздөрүнүн айырмасы эмнеде?

sobes.tech AI

AIден жооп

final жана const өзгөрмөлөрдү түзүү үчүн колдонулат, алардын маанилери аныкталгандан кийин өзгөрүлбөйт:

Негизги айырмачылыктар:

  • Баштоо убактысы:

    • final ишке ашырылуу учурунда (runtime) биринчи кайрылуудан кийин аныкталат.
    • const компиляция учурунда (compile-time) аныкталат.
  • Маанилердин түрү:

    • final өзгөрмө ишке ашырылуу учурунда эсептелген маанини сактай алат.
    • const өзгөрмө эсептелген маанини сакташы керек, ал компиляция учурунда белгилүү болушу керек (литералдар, константтуу өрнөктөрдүн жыйынтыгы).
  • Константтыктык:

    • final: Өзгөрмө константтуу, бирок ага шилтеме берген мааниси (эгер бул объект болсо) өзгөрүлмө болушу мүмкүн.
    • const: Өзгөрмө константтуу, жана ага шилтеме берген мааниси да константтуу (өзгөрүлбөс) болушу керек.

Мисалдар:

// final - ишке ашырылуу учурунда аныкталат
final DateTime now = DateTime.now(); // Маани only 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 Компиляция учурунда Мүмкүн эмес, белгилүү болушу керек Өзгөрбөс болушу керек