Переменные и константы

Последнее обновление: 27.02.2023

Для хранения данных в языке 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:

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);
}

const и final

Одним из отличительных качеств переменных является то, что в течение работы программы мы можем сколько угодно менять их значение:

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);
} 
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850