Dart 作为企图替代 JavaScript 地位的语言, 它的努力和其它很多语言一样, 都失败了不过, Dart 团队并未灰心丧气, 有传言 Google 开发的新操作系统 Fuchsia 里, Flutter 将作为重要开发工具, 显然 Google 并未放弃对 Dart 的期望
今天, Google 正式发布了 Dart 2, 最新的版本诠释了 Google 对 Dart 这门语言的新认识: Dart 是针对 web 和移动客户端开发进行独特优化的语言
以下全文来自 Dart 产品经理 Anders Thorhauge Sandholm 对 Dart 2 的一些解读
Dart 2 大大加强和精简了类型系统, 清理了语法, 并重建了大部分开发工具链, 使移动和 Web 开发变得更加愉快和高效 Dart 2 还融合了包括 FlutterAdWords 和 AdSense 在内的语言早期使用者的经验教训, 以及针对客户反馈的成千上万大大小小的问题进行了改进
Dart 的核心原则
Google 为什么认为 Dart 能够满足客户端开发人员的需求? Google 认为除了现代通用语言所必需的属性之外, 客户端开发还应受益于语言的以下特性:
高效语法必须清晰简洁, 工具简单, 开发周期接近即时
快速即使在小型移动设备上, 运行时的性能和启动也必须非常出色且可预测
便携客户开发人员今天必须考虑三种平台: iOSAndroid 和 Web, 这门语言需要在所有这些平台上运行良好
易用如果这门语言希望让数百万开发人员受用, 那么它就不能脱离实际
反应式这种语言应该支持反应式的编程风格
Dart 已经用于 Google 和其他公司的 WebiOS 和 Android 平台上许多高质量关键性的应用程序, 它对移动和 Web 开发有着巨大的益处:
Dart 加快了开发人员的速度, 因为它具有清晰简洁的语法, 并且能够使用 JIT 编译器在 VM 上运行后者允许在移动开发过程中进行有状态的热重载, 从而实现超短的开发周期, 您可以在设备上运行的应用程序中编辑编译和替换代码
凭借其能够提前有效地编译为本地代码的能力, Dart 在移动设备具有可预测性高性能和快速启动的能力
Dart 支持编译为本地代码 (ARM,x86 等) 以实现快速的移动性能, 并且可以将其转换为用于 Web 的高效的 JavaScript
Dart 对于许多现有的开发人员来说是易用的, 这要归功于其不容忽视的面向对象和语法特点 它允许任何使用 C ++C#Objective-C 或 Java 的开发人员在几天之内迅速提高工作效率
Dart 适用于反应式编程, 其核心库包括 streams 和 futures 它也通过其世代垃圾收集器来管理短暂对象
Dart 2: 更好的客户端开发
在 Dart 2 中, Google 采取了进一步措施巩固 Dart 作为客户端开发语言的霸主地位特别增加了一些新功能, 包括强大的类型功能, 以及将 UI 定义为代码
强大健全的类型功能
AdWords 和 AdSense 背后的团队已经使用 Dart 构建了一些 Google 最大和最先进的 Web 应用, 以管理那些给 Google 带来大部分收入的广告就是在与这些团队进行密切合作合作之后, Google 发现了增强 Dart 类型系统的大好机会, 这有助于 Dart 开发人员在开发过程早期发现 bug, 并更好地扩展到大型团队构建的应用程序中, 提高整体代码质量
当然这不是唯一的方式, 在广袤的 Web 生态系统中, 向 JavaScript 添加类型注释的趋势也在增长例如, TypeScript 和 Flow 都使用类型注释和推理来扩展 JavaScript, 以提高分析代码的能力
在下面的小例子中, Dart 2 的类型推断有助于发现一些微小的错误, 并因此帮助提高整体代码质量
- void main() {
- List<int> prices = ['99', '27', '10000', '20000000'];
- // Sort in place from smallest to largest
- prices.sort();
- print('Lowest price is ${prices[0]}!');
- }
这段代码代表了什么? 你可以合理地预期它会打印 27, 但是, 如果没有启用 Dart 2 的声音类型系统, 它将打印 10000, 因为按照字典顺序排列, 这恰好是字符串列表中最小的元素但是, 使用 Dart 2 时, 此代码会给出类型错误
将 UI 作为代码(UI as code)
在创建 UI 时, 你必须在单独的用户界面标记语言和编写应用程序的编程语言之间进行切换, Google 正在努力使 UI 变成一种愉快的体验, 以显著减少对上下文切换的需求 Dart 2 可选 new 和 const 这个非常强大的功能本身非常有价值, 也为其他事情的发展指明了方向例如, 有了 new 和 const 两种选择, 我们可以清理 UI 小部件的定义, 以便它不再使用单个关键字
- // Before Dart 2
- Widget build(BuildContext context) {
- return new Container(
- height: 56.0,
- padding: const EdgeInsets.symmetric(horizontal: 8.0),
- decoration: new BoxDecoration(color: Colors.blue[500]),
- child: new Row(
- ...
- ),
- );
- }
- // After Dart 2
- Widget build(BuildContext context) =>
- Container(
- height: 56.0,
- padding: EdgeInsets.symmetric(horizontal: 8.0),
- decoration: BoxDecoration(color: Colors.blue[500]),
- child: Row(
- ...
- ),
- );
- view raw
Dart 的客户端用途
移动
Dart 最重要的用途之一就是 Flutter, 它是谷歌新的移动 UI 框架, 为 iOS 和 Android 制作高质量的原生界面
开发人员曾使用 Flutter 构建一个非常受欢迎的节目 Hamilton 的官方应用程序, 并在构建时间上打破了记录 Flutter 使用反应式编程风格并逐个像素控制整个 UI 对于 Flutter 而言, Dart 在易学性反应式编程出色的开发速度以及具有快速的垃圾回收器高性能运行系统等方面都符合要求
- Flutter:
- https://github.com/flutter/flutter/wiki/Trying-the-preview-of-Dart-2-in-Flutter
- Dart SDK :
- https://www.dartlang.org/install
来源: https://juejin.im/entry/5a8fe4506fb9a06358658f18