深入理解 Dart 中的类型系统和泛型

Posted 熊喵先生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入理解 Dart 中的类型系统和泛型相关的知识,希望对你有一定的参考价值。

Dart 中的类型系统不够严格,这当然和它的历史原因有关。在 Dart 最开始诞生之初,它的定位是一门像 javascript 一样的动态语言,动态语言的类型系统是比较松散的,所以在 Dart 类型也是可选的。然后动态语言类型系统松散对开发者并不是一件好事,程序逻辑一旦复杂,松散的类型可能就变得混乱,分析起来非常痛苦,但是有静态类型检查可以在编译的时候就快速定位问题所在。

其实,Dart 类型系统不够严格,这一点不仅仅体现在可选类型上和还没有划分可空与非空类型上,甚至还体现 Dart 中的泛型类型安全上,这一点我会通过对比 Kotlin 和 Dart 中泛型实现。你会发现 Dart 和 Kotlin 泛型安全完全走不是一个路子,而且 Dart 泛型安全是不可靠的,但是也会发现 Dart 2.0 之后对这块做很大的改进。

1. 可选类型

在 Dart 中的类型实际上是可选的,也就是在 Dart 中函数类型,参数类型,变量类型是可以直接省略的。

sum(a, b, c, d) //函数参数类型和返回值类型可以省略
  return a + b + c + d;


main() 
  print(\'$sum(10, 12, 14, 12)\');//正常运行

上述的 sum 函数既没有返回值类型也没有参数类型,可能有的人会疑惑,如果 sum 函数最后一个形参传入一个 String 类型会是怎么样?

答案是:静态类型检查分析正常,但是编译运行异常。

sum(a, b, c, d) 
  return a + b + c + d;


main() 
  print(\'$sum(10, 12, 14, "

以上是关于深入理解 Dart 中的类型系统和泛型的主要内容,如果未能解决你的问题,请参考以下文章

Go 语言的下一个大版本:Go 2.0 被安排上了(全面兼容1.X,改进错误处理和泛型这两大主题)

Dart语法篇之类型系统与泛型

深入理解 Java 泛型擦除机制

按自己的想法去理解事件和泛型(C#)

初识集合和泛型

深入理解 Dart 中的继承和 Minxins