#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
Переменная — это та, которая предназначена для установки только один раз и после этого не изменяется. Следовательно, конечная переменная может быть установлена во время выполнения в конструкторе и не изменяться после этого.