【发布时间】:2018-08-27 21:14:07
【问题描述】:
【问题讨论】:
标签: types dart strong-typing
【问题讨论】:
标签: types dart strong-typing
虽然健全的类型系统为开发人员提供了更大的信心,但它也使我们的编译器能够安全地使用类型来优化生成的代码。凭借稳健性,我们的工具通过结合静态和(在需要时)运行时检查来保证类型是正确的。没有健全性,类型检查只能走到这一步,静态类型在运行时可能不正确。
【讨论】:
这与音频无关。
根据维基百科:
也就是说,如果一个类型系统既是健全的(意味着它拒绝所有不正确的程序)又是可判定的(意味着可以编写一个算法来确定程序是否类型正确)
(参见https://en.wikipedia.org/wiki/Type_system#Static_type_checking)
有关词源的考虑,请参阅“健全性”。
TL;DR:在这种情况下,它的意思是“健壮”、“健康”。
【讨论】:
在这种情况下,声音是一个形容词,意思是“状况良好”。
https://dictionary.cambridge.org/dictionary/english-japanese/sound
【讨论】:
什么是稳健性?
健全性是为了确保您的程序不会进入某些无效状态。健全的类型系统意味着您永远不会进入表达式计算为与表达式的静态类型不匹配的值的状态。例如,如果一个表达式的静态类型是 String,那么在运行时你保证只在评估它时得到一个字符串。
强模式,就像 Java 和 C# 中的类型系统一样,是可靠的。它使用静态检查(编译错误)和运行时检查的组合来强制实现这种可靠性。例如,将 String 分配给 int 是编译错误。如果对象不是字符串,则使用 as String 将对象转换为字符串将失败并出现运行时错误。
Dart 是作为一种可选类型语言创建的,它不是健全的。例如,在 Dart 中创建一个包含整数、字符串和流的列表是有效的。您的程序不会因为列表包含混合类型而无法编译或运行,即使列表被指定为浮点列表但包含除浮点值之外的所有类型。
在经典 Dart 中,问题发生在运行时——从列表中获取 Stream 但获取另一种类型会导致运行时异常并且应用程序崩溃。例如,以下代码将动态类型列表(包含字符串)分配给 int 类型列表。遍历列表并从每个项目中减去 10 会导致运行时异常,因为没有为字符串定义减号运算符。
稳健的好处 健全的类型系统有几个好处:
在编译时揭示与类型相关的错误。 健全的类型系统会强制代码明确其类型,因此在运行时可能难以发现的与类型相关的错误会在编译时显示。
更具可读性的代码。 代码更容易阅读,因为您可以依赖实际具有指定类型的值。在健全的 Dart 中,类型不会说谎。
更易于维护的代码。 使用完善的类型系统,当您更改一段代码时,类型系统可以警告您刚刚损坏的其他代码。
更好的提前 (AOT) 编译。 虽然没有强类型也可以进行 AOT 编译,但生成的代码效率要低得多。
更干净的 JavaScript。 对于 Web 应用,强模式更严格的类型允许 dartdevc 生成更干净、更紧凑的 JavaScript。
为 Dart 带来健全性只需要在 Dart 语言中添加一些规则。启用强模式后,Dart 分析器会强制执行三个附加规则:
在覆盖方法时使用正确的返回类型。
重写方法时使用正确的参数类型。
不要将动态列表用作类型化列表。
【讨论】: