В чем различия между const и final?
//Почему мы можем сделать так:
var list = const [1,2,3];
//Но не можем так:
var list2 = final [1,2,3];
Почему final нельзя ставить справа от знака равенства, а const можно? Ведь их смысл практически одинаковый.
Ответы (1 шт):
Потому что в dart ключевые слова const и final имеют разное назначение, хоть и есть схожие моменты.
Ключевое слово final используется для того, чтобы указать, что переменная не может быть перезаписана, но это не значит, что сам объект не может быть изменяемым. const же позволяет нам создавать неизменяемые (immutable) объекты, то есть мы не можем изменять поля const экземляра. К примеру:
final finalList = [1, 2, 3];
const constList = [1, 2, 3];
finalList.add(4);
print(finalList); // [1, 2, 3, 4]
constList.add(4); // Uncaught Error: Unsupported operation: add
В данном примере переменная constList является неизменяемым так же, как и его объект [1, 2, 3]. То есть мы можем переписать вторую строку как const constList = const [1, 2, 3]; и смысл не поменяется.