Переменная флаттера с ключевым словом const
В учебном пособии "Напиши свое первое приложение" по документам Flutter, шаг 4, озаглавленный "Шаг 4: создание бесконечной прокрутки ListView", вас попросят создать две переменные, показанные здесь:
class RandomWordsState extends State<RandomWords> {
final _suggestions = <WordPair>[];
final _biggerFont = const TextStyle(fontSize: 18.0);
...
}
Почему const
Ключевое слово используется в 3-й строке? Я пришел из C# и JavaScript, и я не привык видеть это с правой стороны оператора присваивания. Я замечаю, если я удаляю это, это все еще работает как я ожидал. Не могли бы вы объяснить в терминах ламенов, почему это используется и когда я должен делать то же самое? Я предполагаю, что это излишне, и мне не нужно его использовать, но я просто хочу убедиться.
Я не считаю, что это дубликат, потому что ответ в этом посте был идеальным для объяснения моего вопроса и не найден в другом посте, не говоря уже о другом посте, это вопрос из двух частей, который никто не найдет при использовании Google.
3 ответа
С сайта новостей дартс:
"
const
"имеет значение, которое немного сложнее и тоньше в Dart. const изменяет значения. Вы можете использовать его при создании коллекций, напримерconst [1, 2, 3]
и при построении объектов (а не новых) типаconst Point(2, 3)
, Здесь const означает, что все глубокое состояние объекта может быть полностью определено во время компиляции и что объект будет заморожен и полностью неизменен.
По моим словам, вы можете использовать const
конструктор (конструкторы, которые определены как const
) лайк const Text()
или же new Text()
,
Если вы используете const Text()
: Это выделит только одну область памяти, а когда вы добавите другую const Text()
, который будет использовать тот же объект, но new Text()
всегда будет выделять новое пространство памяти. Итак, используя const
Вы можете увеличить производительность вашей программы (не так много производительности, но меньше памяти). Кроме того, вы можете определить ваши конструкторы классов как const
, если это нужно повторно использовать.
Я замечаю, если я удаляю это, это все еще работает как я ожидал.
Это потому, что с Дартс два new
а также const
ключевое слово необязательно, когда вы создаете объект / экземпляр, который будет обрабатываться виртуальной машиной Dart. Изначально были некоторые проблемы, но теперь они исправлены.
Даже если вы избегаете const
/new
те будут добавлены Dart VM. Причина, по которой эти два ключевых слова являются необязательными, заключается в том, что во Flutter их необходимо вводить везде (например, в дереве виджетов).
Вот еще один вопрос с некоторыми ответами, которые могут помочь.
Какую цветовую систему использует флаттер и почему мы используем `const Color` вместо` new Color`
Как объясняется принятым ответом, конструкторы const - это небольшая оптимизация. В dart const MyObject(42) будет выделен только один раз, даже если вы вызываете его сотни раз. Что означает меньшее выделение памяти> быстрее
Const означает, что все глубокое состояние объекта может быть полностью определено во время компиляции и что объект будет заморожен и полностью неизменен.