我一直在想Dart中动态类型是否会更慢。
给出一个例子:
final dynamic example = "Example"
对比
final String example = "Example"
是的,在Dart中使用 dynamic
类型的变量通常比使用实际类型定义的变量更慢。
但是,您的示例并没有将 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
更方便。这可能会因编译器和目标平台而有所不同,速度可能会变慢。example
被推断为类型 String
,而不是 dynamic
,那么它怎么可能会变慢呢?风格指南甚至建议不要向那些可以正确推断类型的变量添加冗余类型。Future get(resource)
和 Future<Response> get(resource)
,这个怎么看? - mLstudent33