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:
finalinitsialiseerub tööajal (runtime) pärast esimest kasutamist.constinitsialiseerub kompileerimise ajal (compile-time).
-
Väärtuste tüüp:
finalmuutuja võib hoida väärtust, mis arvutatakse tööajal.constmuutuja 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 |