深入理解 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 中的类型系统和泛型的主要内容,如果未能解决你的问题,请参考以下文章