Sobes.tech
Junior

Milline on erinevus final ja const märksõnade vahel Dartis?

sobes.tech AI

Vastus AI-lt

final ja const kasutatakse muutujate loomiseks, mille väärtusi ei saa pärast initsialiseerimist muuta:

Peamised erinevused:

  • Initsialiseerimise aeg:

    • final initsialiseerub tööajal (runtime) pärast esimest kasutamist.
    • const initsialiseerub kompileerimise ajal (compile-time).
  • Väärtuste tüüp:

    • final muutuja võib hoida väärtust, mis arvutatakse tööajal.
    • const muutuja peab hoidma väärtust, mis arvutatakse kompileerimise ajal (liitmed, konstantsed väljendid).
  • Konstandus:

    • final: Muutuja on konstantne, kuid väärtus, millele ta viitab (kui see on objekt), võib olla muudetav.
    • const: Muutuja on konstantne ning väärtus, millele ta viitab, peab samuti olema konstantne (muutumatu).

Näited:

// final - initsialiseerub tööajal
final DateTime now = DateTime.now(); // Väärtus teada ainult runtime'is

// const - initsialiseerub kompileerimise ajal
const double pi = 3.14; // Väärtus teada kompileerimise etapil

// Kasutades const-i listide ja kaartide jaoks, muudab need muutumatuks
const List<int> constantList = [1, 2, 3];
// constantList[0] = 10; // Viga! List on muutumatu

// Kasutades final-i listide ja kaartide jaoks, muudab muutuja muutumatuks,
// kuid objekti sisu võib muutuda (kui objekt on muudetav)
final List<int> finalList = [1, 2, 3];
finalList[0] = 10; // Lubatud, kuna List on muudetav

// final koos konstantse väärtusega
final int a = 5; // Võib, kuid `const` on sobivam
Initsialiseerimise aeg Nõuded väärtusele Objekti muudetavus (kui see viitab objekti)
final Tööajal Võib arvutada tööajal Võib olla muudetav, kui objekt on muudetav
const Kompileerimise ajal Peab olema teada kompileerimise ajal Peab olema muutumatu