При разработке на Flutter важно не просто уметь писать рабочий код, но и понимать, как работает язык Dart, на котором он основан. Одна из базовых тем — ключевые слова final, const и var. Они отвечают за то, как переменные создаются и ведут себя в процессе выполнения программы. Давайте разберем и повторим базу😁
var (переменная)
Используется для объявления переменной, значение которой может изменяться со временем. Тип переменной определяется автоматически при присвоении значения. Но после первого присвоения типа, переменная не может быть использована с другим типом данных.
Пример:
void main() {
var name = 'Alice'; // Тип определяется как String
print(name); // Alice
name = 'Bob'; // Допустимо, так как тип остаётся String
print(name); // Bob
}
Если тип данных переменной
var известен при создании, Dart сам выводит тип переменной (например, String, int и т.д.).Переменная, объявленная с
var, может изменять свое значение, но не тип.Пример попытки изменить тип переменной:
var age = 30; age = "thirty"; // Ошибка: String нельзя присвоить переменной типа int.
final (константа во время выполнения)
Используется для переменных, значение которых можно установить только один раз. После инициализации переменной значение нельзя изменить. В отличие от
const, переменная с final может быть инициализирована значением, которое становится известно только во время выполнения программы.Пример:
void main() {
final name = 'Charlie'; // name будет неизменяемым
print(name); // Charlie
name = 'Dave'; // Ошибка, нельзя изменить значение переменной
}
final используется для значений, которые известны только во время выполнения программы.Пример использования переменной, которая зависит от выполнения программы:
void main() {
final currentTime = DateTime.now(); // Значение определяется во время выполнения
print(currentTime);
}
В этом примере время будет определено при выполнении программы и больше не изменится.
const (константа времени компиляции)
Это неизменяемая константа, значение которой должно быть известно на этапе компиляции. Это означает, что значения const должны быть определены заранее и не могут изменяться или вычисляться во время выполнения программы.
Пример:
void main() {
const pi = 3.1415;
print(pi); // 3.1415
pi = 3.14; // Ошибка, нельзя изменить значение константы
}
◽️Переменные, объявленные с
const, являются неизменяемыми и создаются во время компиляции программы.◽️Если переменная
const имеет сложный тип (например, список), то она становится полностью неизменяемой (не только ссылка, но и сам объект).Пример со списком:
void main() {
const numbers = [1, 2, 3];
// numbers[0] = 10; // Ошибка, элементы списка изменить нельзя
print(numbers);
}
Различия между final и const
▫️
final позволяет установить значение переменной один раз, но это значение может быть вычислено во время выполнения программы.▫️
const требует, чтобы значение было известно на этапе компиляции.▫️
const можно использовать для создания неизменяемых объектов, которые становятся доступными еще до выполнения программы, в отличие от final.Пример разницы:
final currentTime = DateTime.now(); // Работает, так как значение вычисляется во время выполнения.
const timeConst = DateTime.now(); // Ошибка: const переменные не могут быть вычислены во время выполнения.
Итоговое сравнение:
▪️
var — изменяемая переменная, тип выводится автоматически.▪️
final — неизменяемая переменная, значение можно присвоить один раз, но это может произойти во время выполнения.▪️
const — неизменяемая переменная, значение которой должно быть известно во время компиляции.
