Константный конструктор в Dart (Flutter) - PullRequest
0 голосов
/ 10 июля 2020

Может кто-нибудь объяснить, в чем преимущества константных конструкторов? Если у меня есть StatefulWidget

class X extends StatefulWidget {
  const X(this.a, this.b,...);
  A a;
  B b;
...
}

, я не понимаю, почему используется const. Если я правильно понимаю, const означает, что он известен во время компиляции, но для чего это? Обычно атрибуты a, b, et c. неизвестны во время компиляции, но во время выполнения, так в чем же смысл конструктора const?

1 Ответ

1 голос
/ 10 июля 2020

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

Конструктор const предназначен для создания нескольких экземпляров одного и того же класса с теми же аргументами во время компиляции (поэтому все параметры могут быть определены компилятором и не зависят от времени выполнения), он будет использовать один и тот же экземпляр в памяти. Это разрешено только потому, что все переменные-члены - final.

. Таким образом, преимущества заключаются в возможном улучшении производительности и памяти в определенных c случаях (например, в некоторых классах в dart:convert). Но вы должны вызвать конструктор const, например const MyClass();, чтобы получить такое поведение const. В противном случае, const можно использовать как обычный конструктор для получения обычного экземпляра класса.

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

Но также совершенно нормально не создавать конструктор const.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...