Dart中返回值类型为void和dynamic的函数有哪些区别?
示例1:返回值为dynamic的myName函数
void main(){ myName(nik:121); } dynamic myName({String? firstName, String lastName = 'Tono', required int nik}) { print(nik); print(lastName); print(firstName); }
示例2:返回值为void的myName函数
void main(){ myName(nik:121); } void myName({String? firstName, String lastName = 'Tono', required int nik}) { print(nik); print(lastName); print(firstName); }
二者核心差异
- 返回值使用限制不同
void作为返回值的函数明确表示无可用返回值:你既不能在函数内部写return 任意值;(只能写不带返回值的return;),也不能在调用后接收、使用该函数的返回值,强行操作会触发静态分析报错,甚至编译失败。dynamic作为返回值的函数允许返回任意类型的值:哪怕你没手动写return语句,函数默认会返回null,调用后可以正常将返回值赋值给变量,也可以调用该值的任意方法(类型检查会延迟到运行时执行)。 - 语义表达不同
void是给调用方的明确提示:这个函数只有打印、修改全局变量这类副作用,不需要关注返回值,也不应该使用返回值。dynamic是给调用方的提示:该函数的返回值类型不固定,需要调用方自行处理类型安全问题。 - 类型检查逻辑不同
void返回值的类型检查在编译期就会生效,任何尝试使用返回值的操作都会被提前拦截。dynamic返回值的所有类型相关检查都会延迟到运行时,编译期不会做类型校验,更容易埋下运行时异常的隐患。
内容的提问来源于stack exchange,提问作者Andrean Tama
相关产品推荐
相关产品推荐

