Dart语言中的哪些源代码可以被认为是有效的,为什么?

时间:2014-03-20 07:50:06

标签: dart

此脚本(源代码)可以在生产模式下完美执行。

void main() {
  int greeting = "Hello world!";
  print(greeting);
}

这是一个传统的hello world示例,在Dart中运行良好。

结果是" Hello world!"。

这个脚本是自足的,因为不需要其他功能,它可以按预期工作。

现在我有一些小问题:

  1. 我可以认为这个脚本是有效的吗?Dart语言中的源代码是正确的,因为它按预期工作了吗?
  2. 如果此脚本是Dart语言中的有效源代码,那么为什么它不能在非生产模式下执行?
  3. 如果某些代码可以在生产模式下完美执行但无法在其他模式下执行,那么Dart中的哪种模式更正确(生产模式或其他模式)?
  4. P.S。

    作为一名程序员,我感兴趣的不是理论和实践,但我只对基于真实例子的小问题的答案感兴趣(即使它非常小)。

    如果我的问题不正确那么我想知道为什么?

    因为它们与Dart语言编程直接相关。

1 个答案:

答案 0 :(得分:6)

这是有效的,因为在生产模式中会忽略类型。

在检查模式下(仅用于开发),会检查类型并获得异常。

Dart中的类型不是用于运行时,而是用于开发时间,以使工具能够推断代码并显示可能的错误。 这意味着,如果您输入Stringvar,则无关紧要。你不能完全省略它,因为这违反了语法。

可以在生产模式下执行

# ~/dart/playground/bin/dart_valid
 $ dart main.dart
Hello world!

在检查模式(开发模式)下失败

# ~/dart/playground/bin/dart_valid
 $ dart -c main.dart
Unhandled exception:
type 'String' is not a subtype of type 'int' of 'greeting'.
#0      main (file:///home/zoechi/source/my/dart/playground/bin/dart_valid/main.dart:2:18)
#1      _startIsolate.isolateStartHandler (dart:isolate-patch/isolate_patch.dart:216)
#2      _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:115)

pub build失败,因为它使用的分析器使用类型注释,例如在已检查模式和抛出。