Да, использование dynamic
типизированных переменных в Dart часто медленнее, чем использование переменных, типизированных реальным типом.
Однако ваш пример не использует dynamic
в качестве типа, он использует вывод типа для вывода типа String
. Это может стоить немного дополнительно во время компиляции, но во время выполнения ваши два примера кода полностью идентичны. Обе переменные имеют тип String
.
Вызов метода dynamic
может быть медленнее, потому что система времени выполнения должна добавить дополнительные проверки, чтобы гарантировать, что переменная может делать то, что вы пытаетесь сделать с ней.
Если у вас есть int x = 2; print(x + 3);
, система времени выполнения знает, что int
имеет оператор +
, и даже знает, что это такое.
Если вы напишите dynamic x = 2; print(x + 3);
, система времени выполнения должна сначала проверить, имеет ли x
оператор +
, прежде чем она сможет его вызвать, и найти определение этого оператора для объекта перед его вызовом. Это не всегда может быть медленнее, некоторые случаи оптимизируют лучше, чем другие, но это никогда не может быть быстрее.
Не весь код чувствителен к производительности, и не все переменные могут быть напечатаны. Если у вас есть переменная, которая содержит String
или List
, и вы хотите узнать длину, просто написать stringOrList.length
удобнее, чем stringOrList is String ? stringOrList.length : (stringOrList as List).length
. Это может быть медленнее в зависимости от компилятора и целевой платформы.