Для хранения данных в языке Dart, как и в других языках программирования, используются переменные. Переменная определяются следующим образом:
Тип_данных имя_переменной;
Тип данных представляет один из встроенных типов или типов, определенных программистом. Имя переменной представляет произвольное название, которое может содержать алфавитно-цифровые символы и символ подчеркивания и
которое не должно совпадать с одним из ключевых слов языка: abstract, else, import, super, as, enum, in, switch, assert, export, interface,
sync, async, extends, is, this, await, extension, library, throw, break, external, mixin, true, case, factory, new, try, catch, false,
null, typedef, class, final, on, var, const, finally, operator, void, continue, for, part, while, covariant, Function, rethrow, with,
default, get, return, yield, deferred, hide, set, do, if, show, dynamic, implements, static
Например, определение переменной name типа String:
String name;
Для именования переменных применяется стиль lowerCamelCase, то есть название переменной начинается с маленькой буквы. Если имя переменной состоит из двух и более слов, то первое слово начинается с маленькой, а все последующие слова с большой буквы, например, userAge, или oldUserAge.
С помощью операции присваивания переменной можно присвоить значение, которое соответствует ее типу. Например, тип String
представляет строку.
Соответственно переменной этого типа мы можем присвоить строку:
void main() { String name = "Tom"; print(name); name = "Bob"; print(name); }
Конольный вывод:
Tom Bob
Для определения переменной также можно использовать ключевое слово var:
var name = "Tom";
В этом случае Dart сам выводит тип переменной, исходя из присвоенного ей значения.
Еще один способ определения переменной представляет использование оператора dynamic.
dynamic name = "Tom";
Данный оператор, как и var
, позволяет вывести тип переменной исходя из присвоенного ей значения. Но в отличие от var, dynamic позволяет изменять
тип переменной. Например, если в следующем случае при выполнении программы мы получим ошибку:
void main() { var name = "Tom"; print(name); name = 45; // Ошибка!!! name представляет строки, а не целые числа print(name); }
В данном случае исходя из присвоенного переменной name начального значения (строка "Tom") для нее определяется тип String, который представляет строки. Однако далее мы пытаемся присвоить переменной число - 45. Это значение не является строкой, поэтому не вписывается в диапазон допустимых значений для типа String - типа переменной name, поэтому программа выбрасывает ошибку. И чтобы можно было динамически менять тип данных, применяется оператор dynamic. Так, следующая программа выполниться без ошибок:
void main() { dynamic name = "Tom"; print(name); name = 45; print(name); }
Одним из отличительных качеств переменных является то, что в течение работы программы мы можем сколько угодно менять их значение:
void main() { var name = "Tom"; print(name); // Tom name = "Bob"; print(name); // Bob name = "Sam"; print(name); // Sam }
Если же значение переменной менять не нужно, а иногда даже нежелательно, то вместо переменных можно использовать константы. Константы определяются с помощью операторов const и final:
void main (){ const name = "Tom"; print(name); // Tom //name = "Bob"; // Ошибка - значение константы нельзя изменять! }
Если мы попробуем именить значение константы, то в процессе компиляции программы мы столкнемся с ошибкой.
Использование final аналогично:
void main (){ final name = "Tom"; print(name); // Tom //name = "Bob"; // Ошибка - значение константы нельзя изменять! }
Главное различие между const и final состоит в том, что значение const
должно быть определено при компиляции, а значение константы final определяется во время выполнения. Рассмотрим разницу между ними на небольшом примере.
Допустим, мы хотим вывести на консоль текущую дату и время. Для получения текущих даты и времени в Dart мы можем использовать выражение DateTime.now()
.
Например, сохраним дату и время в константу и вывежем на консоль:
void main() { final today = DateTime.now(); print(today); }
Здесь дата и время сохраняются в константу today. Обратите внимание, что константа today определена с ключевым словом final
. Потому что при каждом запуске программы текущее
время будет изменяться. То есть дата и время и определяются во время выполнения программы.
Если же мы попробуем в примере выше вместо final
использовать const
, то программа не скомпилируется и не запустится:
void main() { const today = DateTime.now(); // ! Ошибка print(today); }
При определении констант можно не указывать их тип:
void main (){ const a = 5; print(a); final b = 9; print(b); }