Ключевое слово const было предметом дебатов и обсуждений в сообществе флаттера, от парней, которые в крайнем недовольстве жаловались на новые правила линтинга, которые вынуждают их вводить константу в нескольких точках приложения, а также заставляют их удалять их там, где это не нужно. Некоторые, с другой стороны, приветствуют ключевое слово const, чтобы сказать, что это святой Грааль для повышения производительности и оптимизации.

Но что делает ключевое слово const? и какое это имеет значение? В этой статье я поделюсь своими знаниями и «изученной» информацией, которая может помочь понять суть дела.

Что такое ключевое слово const и почему нас это должно волновать?

Ключевое слово const используется, когда значение переменной известно во время компиляции и никогда не изменяется. Другими словами, компилятор заранее знает, какое значение должно быть сохранено в этой переменной.

const int x = 1;
//At compile time, the value of x is going to be 1 and will not change.

Flutter также автоматически определяет тип переменной, когда вы просто объявляете и инициализируете ее как константную переменную.

const name = "John Doe";

Но к чему тогда возня? Если я использую ключевое слово const только для того, чтобы указать, что значение будет постоянным, зачем мне это нужно? Или почему бы мне просто не пойти обычным путем и поступить так?

int x = 1;

На самом деле да, вы можете просто пойти своим обычным путем и делать то же самое, что и раньше, потому что на самом деле разница здесь не так очевидна. Или правда?

Фактическое использование ключевого слова const заключается в том, чтобы служить индикатором, который сообщает компилятору, что «для этой переменной она никогда не изменится за время существования этого кода, поэтому создайте только одну ее копию и где когда бы он ни упоминался, просто вернитесь к одной копии, которую вы уже создали, и не создавайте новую ».

Прежде чем мы продолжим, стоит отметить, что const используется для констант времени компиляции, таких как строки, числа, числа с двойной точностью и даже классы. Да, классы.

Возвращаясь к важности const, ее важность может быть очень очевидной, когда у нас есть классы и их конструкторы. Flutter имеет дело с виджетами, и каждый виджет - это класс. Представьте, что вы создаете виджет, который делает что-то конкретное и никогда не меняется, например, просто создает синий квадрат определенного размера.

Если вы решите, что в вашем приложении будет 100 синих квадратов размером 50,

Обычно вы создаете для каждого из 100 объектов экземпляр BlueSquare.

BlueSquare(size:50);

Давайте подумаем об этом так, если бы Flutter создавал в памяти каждый из 100 объектов BlueSquare, это было бы пустой тратой памяти, если бы он мог просто создать один, а затем всякий раз, когда вы пытаетесь создать новый объект того же размера , он просто просматривает свой кеш и дает вам «ссылку» на объект, верно ?.

Отлично, ключевое слово const поэтому здесь полезно как то, что сообщает флаттеру, что делать, когда он встречает конструктор, который не будет изменяться, другими словами, постоянный конструктор.

Константный конструктор - это конструктор, который инициализирует все свои конечные поля, и он часто обозначается константой перед конструктором.

Однако, если вы не добавите ключевое слово const перед конструктором, то даже если оно удовлетворяет условиям как const, оно не будет считаться таковым Flutter, и вы не сможете инициализировать его с помощью const. В нашем примере выше виджет BlueSquare ему удовлетворяет, поэтому позволяет сделать так, чтобы он был постоянным.

А затем мы создаем объекты как

const BlueSquare(size: 50);

По сути, конструктор const создает канонические типы, которые упрощают оценку равенства. Если вы создадите.

Поскольку они действительно указывают на один и тот же объект. Если у вас есть конструктор const, это связано с тем, что вы хотите убедиться, что поля в классе (обычно) никогда не изменяются, и поэтому вам нужно определить все поля с помощью ключевого слова final, иначе у вас будет ошибка.

Это имеет смысл, потому что если у вас есть объект, который будет изменяться, зачем вам сообщать компилятору, что он постоянный? (звучит противоречиво).

То, что это экономит память, - не единственное, что важно для константных виджетов. Поскольку объект помечен как постоянный, flutter знает, что в случае перестройки нет смысла перестраивать этот объект, поскольку «он не должен был изменяться». Это значительный прирост производительности, поскольку после создания объекта в течение срока службы приложения он останется прежним, и это просто впечатляет и улучшает даже функциональность горячего перезапуска flutter, поскольку он знает, где и что восстанавливать на основе изменения.

Я бы закончил свою статью здесь, но о const нельзя говорить без упоминания ключевого слова final, поскольку многие разработчики склонны использовать их взаимозаменяемо и чаще всего, когда сталкиваются с выбором выбора, всегда прибегают к final, а не к const.

final int x = 50;
const int x = 50;

На самом деле const и final очень похожи, поскольку оба определяют значения, которые не должны изменяться. Но final больше похож на менее строгую форму const в том смысле, что он содержит значения, которые не должны изменяться, но эти значения могут быть неизвестны в течение определенного периода времени даже после компиляции, но как только они известны, они никогда не меняются.

final response =
 await http.get(Uri.parse(‘https://jsonplaceholder.typicode.com/albums/1'));

Наконец, переменные экземпляра могут быть только final, а не const, а статические переменные предпочтительнее быть const, чем final, потому что объявления const более удобны для горячей перезагрузки и могут экономить память, поскольку статические переменные не предназначены для изменения, почему бы не сообщить компьютеру, что, используя константный «индикатор» ?.

Я надеюсь, что это изложение демистифицирует ключевое слово const, его важность и способы использования.

Спасибо за чтение и до встречи в следующем.

Следите за сообществом Flutter в Twitter: https://twitter.com/FlutterComm