Types 当声明局部变量时,它';最好在Dart中声明类型或只使用'var'?
在dart中,有一个Types 当声明局部变量时,它';最好在Dart中声明类型或只使用'var'?,types,dart,var,Types,Dart,Var,在dart中,有一个var,表示动态类型 当声明局部变量时,我可以写: String name=“Freewind”; 或 var name=“Freewind”; 起初我认为它们是一样的,因为编辑器应该能够推断出名称的类型是字符串,但我很快发现: void hello(字符串名){print(“hello,$name”);} int n=123; 你好(n);//编辑将在这里给出警告 var m=456; 你好(m);//但不会在这里 我尝试了DartEditor(基于eclipse)和
var
,表示动态类型
当声明局部变量时,我可以写:
String name=“Freewind”;
或
var name=“Freewind”;
起初我认为它们是一样的,因为编辑器应该能够推断出名称
的类型是字符串
,但我很快发现:
void hello(字符串名){print(“hello,$name”);}
int n=123;
你好(n);//编辑将在这里给出警告
var m=456;
你好(m);//但不会在这里
我尝试了DartEditor(基于eclipse)和IDEA,发现两者都没有在hello(m)
上给出警告。似乎他们将m
视为dynamic
,而不是int
,因此他们不会发出警告
如果我理解正确,我们应该尽可能多地声明类型以获得类型安全检查,对吗?但是我喜欢var
,因为它比较短,不需要复制类型信息
或者仅仅因为Dart的编辑不够强大而没有警告,我们将来会收到警告?来自Dart常见问题解答:
Dart有类型推断吗
类型推断不是由语言规范指定的,而是实现可以自由执行的。重要的是要记住,Dart有一个动态类型系统,因此类型推断与Haskell等语言中的作用不同。然而,Dart编辑器确实会进行一些类型推断,例如当您对局部变量使用var时。我们期望Dart VM和dart2js在对性能或其他原因有用时使用类型推断
从省道样式指南: 更喜欢对局部变量使用不带类型注释的var 现代代码中的方法体往往很短,并且局部变量的类型几乎总是可以从初始化表达式中推断出来,因此显式类型注释通常只是视觉噪声。体面的编辑器可以推断局部变量的类型,并且仍然提供您所期望的自动完成和工具支持
Q:在声明局部变量时,最好在Dart中声明类型或仅使用
var
答:使用“var”的更好方法
问:或者仅仅因为Dart的编辑不够强大而没有警告,我们将来会收到警告 答:可能在不久的将来,新的Dart编辑器分析器将得到全面实施和改进 如果我理解正确,我们应该尽可能多地声明类型以获得类型安全检查,对吗 有点。通过提供类型信息,您可以向工具和其他人提供有关您意图的信息。使用您提供的任何类型信息取决于工具 Dart本身以两种模式运行—已检查或生产模式。从编辑器中运行应用程序时,默认情况下,它将以选中的模式运行。这可以在代码运行时有效地执行类型断言。上面给出的示例在没有警告的情况下通过静态分析器,但无法在选中模式下运行。在生产模式下,它将尝试运行(在本例中,它将成功运行) 通过成功运行,在生产模式下,您的代码将被视为
void hello(name) { print("Hello $name"); } // note the lack of type info on the signature
var i = 123;
hello(i); // "Hello 123"
这实际上与JavaScript相同——它将一直运行到故障点。类型信息只是注释,形式化为语言,因此当您编写
void
你好(
name){…}
无效的void
和String
是类型注释,在生产模式下被忽略,但工具和人类都可以使用。请检查一下-您的意思是void hello(name:String)
或无效hello(字符串名称)
?对不起,我把dart和scala混合了:)