Dart中动态类型是否更慢?

6

我一直在想Dart中动态类型是否会更慢。

给出一个例子:

final dynamic example = "Example"

对比

final String example = "Example"

第一个例子不是动态调用。 - Jonah Williams
2个回答

13

是的,在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更方便。这可能会因编译器和目标平台而有所不同,速度可能会变慢。


2
在你的第一个示例中,example 被推断为类型 String,而不是 dynamic,那么它怎么可能会变慢呢?风格指南甚至建议不要向那些可以正确推断类型的变量添加冗余类型。

从方法签名中省略返回类型,比如 Future get(resource)Future<Response> get(resource),这个怎么看? - mLstudent33

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接