首页 > 解决方案 > 我应该输入类型吗?

问题描述

创建变量时我应该给出类型吗?

仅声明关键字“var”有什么缺点吗?

这两者有什么区别吗?

var a = 0; int a = 0;

标签: dart

解决方案


优点缺点

ONGOING WORK

最佳实践

推荐使用varorfinal关键字,不指定类型注解,隐式推断已知局部变量的类型。否则,建议指定类型注释。至于dynamic关键字,当您进行手动类型检查时,在特定用例中应该非常谨慎地使用它。例如print(myVariable is SomeType).

omit_local_variable_typesDart linter 规则鼓励省略已知局部变量的类型注释。always_specify_types鼓励为不属于前 linter 规则范围的情况指定类型注释。

1. Flutter repo 风格指南

1.1避免使用var

所有变量和参数都是类型化的;在任何可以确定实际类型的情况下避免使用“动态”或“对象”。在可能的情况下,始终专门化泛型类型。显式键入所有列表和映射文字。

这实现了两个目的:它验证编译器将推断的类型是否与您期望的类型匹配,并且在类型不明显的情况下(例如,调用构造函数以外的任何内容时)使代码自记录。

始终避免使用“var”。如果您明确表示类型未知,请使用“动态”,但更喜欢“对象”和强制转换,因为使用动态会禁用所有静态检查。

2. Dart Lint 规则

2.1omit_local_variable_types

考虑省略局部变量的类型注释。

通常,局部变量的类型可以很容易地推断出来,因此不需要对其进行注释。

2.2always_specify_types

指定类型注释。

var在指定类型未知和省略类型注释的简写时避免。dynamic如果您明确表示类型未知,请使用。Object如果您明确表示您想要一个实现==和的对象,请使用hashCode

参考

您可以参考Flutter repo 的样式指南、 Dart 的 Linter 支持的 Lint 规则的完整列表和Effective Dart 的样式指南

请注意,Flutter repo 的样式指南在 Flutter社区中使用,并且优先于 LinterRules 和 Effective Dart 的样式指南,尤其是在 repo 贡献中。据我所见,Flutter repo的样式指南更像是一个超集样式指南,应该遵守 Dart Linter 规则。


推荐阅读