В чем разница между постоянными переменными и постоянными значениями в Dart?

#dart

#dart

Вопрос:

В Dart есть то, чего я не видел в других языках:

 var foo = const [];
final bar = const [];
const baz = [];
  

В первом случае, хотя сама переменная не является постоянной, ее значение равно.

Зачем это необходимо?

Ответ №1:

Потратив некоторое время на это, я думаю, что понимаю:

Допустим, у вас есть:

 var foo = const [];
final bar = const [];
const baz = [];
  

Вы можете изменить значение не окончательной, неконстантной переменной, даже если раньше она имела постоянное значение:

 foo =  [1, 2, 3]; // Was const []
  

Это полезно в случае операций, где значения не должны обновляться. Допустим, вам нужна переменная для представления дней месяца:

 month = const [1, 2, 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28]; //For February
  

Поскольку дни в феврале постоянны, мы не хотим, чтобы кто-либо менял дни в месяце. Следовательно, в этом случае имеет смысл, чтобы значение было постоянным.

В какой-то момент одну и ту же переменную может потребоваться повторно использовать для представления другого месяца. В этом случае мы можем сделать:

 month = const [1, 2, 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]; //For March
  

В этом случае значение переменной изменяется, но само значение остается постоянным.Это важно в тех случаях, когда вы не хотите, чтобы значение изменялось. Например, выполнение month.add(32) приведет к ошибке скрипта.

Следующие два случая — это то, к чему мы привыкли:

 final bar = [1,2,3];
const baz = [];
  

const Переменная предназначена быть константой времени компиляции.
final Переменная — это та, которая предназначена для установки только один раз и после этого не изменяется. Следовательно, конечная переменная может быть установлена во время выполнения в конструкторе и не изменяться после этого.