Dart中List类型注解两种写法哪种更推荐?背后的原因是什么?
Dart两种List类型注解写法的选择依据
这两种写法编译后生成的代码完全一致,运行时没有任何差异,选择的核心判断标准是项目规范和可读性需求,具体依据如下:
优先选写法2的场景
- 项目已启用
omit_local_variable_typeslint规则:该规则明确要求不需要显式标注可从初始化表达式推断的局部变量类型,写法2完全符合规则要求,不会触发lint告警,同时避免了类型声明的冗余——你已经在右侧字面量标注了<int>,左侧重复写List<int>没有必要。 - 作用域较小的局部变量:如果变量是函数内部的临时变量,几行代码内就会用完,写法2更简洁,不会影响可读性。
优先选写法1的场景
- 项目未启用相关lint规则,且你需要声明更宽泛的变量类型:比如你希望变量类型是
Iterable<int>而非具体的List<int>,或者是num而非int,这时候只能用显式类型标注,因为var会直接根据右侧初始化表达式推断出最具体的List<int>类型,不符合你的类型预期。 - 变量作用域较大,或是顶层变量、类成员变量:
omit_local_variable_types规则仅对局部变量生效,对于作用域更大的变量,显式标注类型可以直接让阅读代码的人知道变量类型,不需要额外推导初始化逻辑的返回值,可读性更好。 - 右侧初始化表达式逻辑复杂,类型无法一眼识别:如果右侧不是简单的字面量,而是多层函数调用、计算得到的返回值,显式写左侧类型可以降低阅读成本,不用开发者逐行推导表达式的返回类型。
额外注意点
无论选哪种写法,都建议给集合字面量显式标注类型参数,比如不要省略<int>直接写var numbers = [1,2,3],如果是空集合的写法,省略类型参数会被推断为List<dynamic>,引入不必要的动态类型风险。
内容的提问来源于stack exchange,提问作者Masahiro Aoki
相关产品推荐
相关产品推荐

