随着跨平台移动 UI 框架 flutter 的走红,小众语言 Dart 也逐渐进入开发者的视野。Dart 作为 Flutter 的御用开发语言,集多种编程语言的优点于一身,越来越受到开发者们的喜爱。今天我们跟随作者 Nafis Fuad 来细数下不得不学习 Dart 语言的十大理由。
2019 年的今天,Dart 是你能学习到的最佳语言之一。它作为编程入门语言也非常合适(在我看来,入门 Dart 至少比入门 Java 更容易)。我曾为开发一个新项目而学习了 Dart,结果我深深爱上了这门语言,乃至想为它编写一个完整的教程。我接触过的语言有很多,但它们都没有让我如此心动过。
Dart 是谷歌开发的一种 通用编程语言,后被 Ecma 认定为标准(ECMA-408)。它被用于构建 Web、服务器、桌面和移动应用程序。——维基百科
2019 年的今天,Dart 是你能学习到的最佳语言之一。它作为编程入门语言也非常合适,在我看来,入门 Dart 至少比入门 Java 更容易。我曾为开发一个新项目而学习了 Dart,结果我深深爱上了这门语言,乃至想为它编写一个完整的教程。我接触过的语言有很多,但它们都没有让我如此心动过。
Dart 是谷歌开发的一种通用编程语言,后被 Ecma 认定为标准(ECMA-408)。它被用于构建 Web、服务器、桌面和移动应用程序。——维基百科
Dart 的诞生
2011 年 10 月 10 日的 GOTO 大会上,谷歌的两位工程师发布了“Dart”;Dart 是一种全新的编程语言,旨在帮助开发者构建 Web 应用程序。Dart 1.0 于 2013 年 11 月 14 日发布。
与往常一样,来自谷歌的所有事物都能引发科技产业的极大兴趣。实话说,早期 Dart 项目自发布后就经历了一段停滞期(因为谷歌一开始希望 Dart 语言能取代 Javascript,或者扮演类似 CoffeeScript 的角色)。但这么多年过去,很多事情都发生了变化。现在 Dart 的主要使命已经改变,它已经广泛应用在众多类型的项目中了。
不管怎样,我们对 Dart 的起源与初心不用太过深究;重点在于,今天 Dart 的成就远远超过了最初的设定目标。听起来是不是很耳熟?Javascript 就有这样的历史。但 Dart 与 Javascript 不同的是,从编程语言的角度来看前者要优秀很多。如果你想知道为什么你应该了解 Dart,那么就继续看下去吧。
Dart 的 10 个优点
- Dart 非常灵活
Dart 是一种非常灵活的编程语言。你可以用它编写代码,然后在任何设备上运行程序,同时不受任何限制。
基于 Flutter 框架使用 Dart 编写的移动应用都是原生的跨平台应用,因此可以同时支持 Android 和 iOS(就像 React Native 和 Xamarin 等)。开发者甚至可以用 Dart 编写 Web 应用,然后这些应用就可以在任意浏览器上运行了。从开发者的角度来看,语言的灵活性和可移植性是非常重要的。毕竟,谁不想只写一次代码,然后就能在尽可能多的平台上运行程序呢?
只要你熟悉了面向对象编程的一般原则,就能很自然地用 Dart 编写代码了。与此同时,Dart 也可以实现完整的函数式编程。使用 async/await 和 Dart 中的“Future”进行异步编程也完全没有障碍。如果你是一名单元测试工程师,那么 Dart 就是你的福音,因为它有内置的单元测试支持,无需添加新的库或框架。
Javascript 信奉无类型的哲学,因为在 JS 看来无类型意味着灵活性。但开发者经常会提到,灵活性太多反而会毁掉你的软件。类型这种事物,开发者有时候想用有时候又不需要。而只要使用 Dart,那么用不用类型就是你的自由。Dart 可以让你两全其美,需要的时候你随时可以在两种环境中来回切换。
- Dart 拥抱了开源生态系统
55%的开发者表示他们正在为开源项目做贡献。——DigitalOcean,2018
开发者喜欢开源世界。实际上,整个科技行业都喜欢开源技术。Dart 从诞生的第一天起就拥抱了开源生态系统,从而赢得了全世界众多开发者的好感。
Dart 看起来是 Java 的直接对手,而 Java 是一种私有语言,谷歌就因为 Java 面临着许多麻烦;此外,从很多层面来看 Dart 远远强过 Java。
至于 Dart SDK 这方面,如果你有什么好想法就可以用在自己的 SDK 里,也可以向社区提交改进提案。如果你找到了 bug 可以立刻上报,也可以自行修复。这些都是私有语言很难为开发者提供的自由。这也是为什么很多私有软件发展一段时间后就停滞不前的原因。相比之下,开源软件总是充满活力,生机勃勃。
使用 Dart 时不像 Java 那样还得瞻前顾后:
开发者无需关心授权许可问题
不会有人因为你用了这种语言而跑来起诉你
你也不会仅仅因为用了一种语言就得向什么人或什么公司付款
甲骨文最近宣布,他们将从 2019 年开始向“经营、商业或生产”用途对 Java 8 标准版收取授权费用。想要获得全部更新和错误修复的话,客户需要按用户数或处理器数量付费。
受两大科技巨头之间的战争影响,越来越多的企业开始向开源生态转型来保证自身安全。毕竟,当你投入全部精力和专业知识来开发和销售产品,为其日夜辛劳时,你最不希望看到的就是把赚到的辛苦钱都转到其他公司的银行账户上。
- Dart 很容易学习
学习一种编程语言需要时间、精力和耐心。你要学的不仅仅是语言本身,还包括它的整个生态系统、与之相关的众多术语,还要了解对应这种语言的工具和 SDK,最后学习应用对应这种语言的流行框架和库。虽说我已经学习了许多流行语言,如 C、Python、Javascript(包括 Typescript)、Go、PHP 等等,但我必须承认,现在就连“学习一种新语言”的想法都会让我胆战心惊了。
但当我开始学习 Dart 的时候,很快我就意识到它上手起来多么容易,多么似曾相识。其实 Dart 就像很多开发者所评价的那样:
你还没开始学 Dart,可能就对它很熟悉了。
如果你有任何语言的编程经验,那么你只要花几周时间学习就能在工作中用上 Dart 了。我并不是说 Dart 的瓶子里装的都是陈年老酒,只是 Dart 引入的新概念都非常直观易懂,不需要花那么长时间来学习掌握。
Dart 是强静态类型语言,并支持 类型推断:类型推断是指在编程语言中自动检测表达式的数据类型。自动推断类型能简化许多编程任务,使程序员可以自由地省略类型注释,同时仍允许类型检查。关于类型推断的更多介绍可参考维基百科。这使得编程背景各异的开发者都可以轻松地过渡到 Dart 上。想了解有关 Dart 类型系统 的更多信息,参考下方的链接。
Dart 的语法很简单:就算开发者是第一次接触 Dart,也会觉得它的语法很眼熟。哪怕你之前从来没见过 Dart 代码也能轻松理解它的含义,不会茫然无措。Dart 的语言结构很合理,所以如果你了解 C、Java 或 C#,那么入门 Dart 就会非常简单了。
- Dart 是一门优秀的编程入门语言
虽说 Dart 不是我开始学习编程时接触的第一门语言,但我觉得它作为编程入门语言来说是最佳选择。当年我开始学编程的时候要是有 Dart 就太棒了。
首先,Dart 上手起来很容易。如果你只想试用一下的话,甚至什么东西都不用安装,只要打开浏览器访问 Dartpad 就行了。其次,Dart 团队制作了一套非常好的介绍和教程资料,文档内容详尽丰富。他们自己做的教程就很容易看懂,谷歌设法做到了让所有人都能轻松入门 Dart。最后,Dart 的语法很简单,开发社区相当成熟,Dart 的用户也越来越多。此外,由于 Dart 与 Javascript 有良好的兼容性,越来越多的 Javascript 开发者意识到转向 Dart 是很轻松的工作。
这样,由于 Dart 语言与开发者之间几乎没有摩擦和障碍,它就有了充足的资本以快速发展并广泛普及。
- Dart 拥有完善的工具支持
Dart 拥有丰富的工具支持。几乎所有主流文本编辑器和 IDE 都对 Dart 语言提供了良好的支持。你即可以使用 Webstorm、IntelliJ IDEA 和 Android Studio 等大型 IDE,也能用诸如 VS Code、Sublime text、VIM、Emacs、Atom 等简单编辑器来编写 Dart 代码。想用什么编辑器完全取决于你的喜好。
想要了解 Dart 可用的完整工具列表,请访问链接:
https://www.dartlang.org/tools
- Dart 是一种稳健的语言
作为语言来说,Dart 非常稳健。Dart 由谷歌开发,其主要目的是创造像 C# 和 Java 之类基于 C 语言的面向对象编程语言。它也是一种通用编程语言,所以编译速度快且简洁。
Dart 是一种开源、纯粹面向对象、类型可选,以及基于类的语言,它还能很好地支持反应式和函数式编程。
与 C#或 Java 不同的是 Dart 根本不会膨胀。事实上,它是一种相对简单、现代化且高效的语言。它像 C 一样也是编译语言,所以它比 Java 快得多。Dart 比 Javascript 也快了大约 1 倍。它是类型安全语言,并可使用 AOT 和 JIT 编译器编译(下文会解释这里的优势)。想了解关于性能对比的更多信息可查看链接:
https://benchmarksgame-team.pages.debian.net/benchmarksgame/faster/dart.html
从语言的角度来看 Dart 非常稳健。Dart 速度快、可靠、高效,而且由于一家技术巨头大量应用这种语言,开发社区中 Dart 的普及率正在一路飙升。如果你想了解谷歌(以及其他公司)在内部应用 Dart 的情况,请查看此处:
https://www.dartlang.org/community/who-uses-dart。
- Dart 有足够的生产力
除了简洁易用外,Dart 还非常重视生产力。谁不想用更少的代码完成更多工作呢?
本质上来说,正是干净、直观、简洁和简单的语法让 Dart 语言有良好的生产力表现。此外,内置的强类型检查让 Dart 非常适合用于需要大规模开发团队的大型项目。Dart 还集成了大量的库和框架;你想实现一项新功能的时候不需要重新发明轮子,节省了大量时间;你只要按文档说明扔进去一些代码就足够了,从而显著提高生产力。
语言层面,虽说 Dart 是完全面向对象的语言,你也可以把它当作完整的函数语言来使用。此外 Dart 也没有 Javascript 中那些奇特的 catch 语句。所以你只要用一门语言就能兼顾面向对象编程和函数式编程。(太幸福了)
- Flutter 框架使用 Dart
随着 Flutter 项目越来越受欢迎,开发者对 Dart 也产生了浓厚的兴趣。尽管 Dart 是一种令人惊叹的语言,拥有出色的生产力工具,并且从诞生之日起就有了完善的文档支持,但如果没有大型公司使用的话,谁还会在意它呢? 但是现在,我们学习 Dart 之后就可以用它做一些有意义的工作了。现在很多企业都在使用 Flutter,所以默认状态下开发者会在 生产环境 中使用 Dart。此外 Dart 还有一个庞大的开发者社区,他们渴望分享关于 Dart 的知识、经验和学习历程。我相信现在就是开始学习 Dart 的最佳时机,何不开始行动呢。
我强烈建议读者阅读在 Hackernoon 上发表的这篇 文章,以了解为什么谷歌会将 Dart 语言用于他们的 Flutter 项目。请注意,Flutter 是谷歌真正的革命性项目,所有人都知道谷歌启动了 Flutter 项目来取代 Facebook 的 React Native。事实上,谷歌团队理所当然地承认 Flutter 的灵感就是来自 React Native 的。
React Native 的开发者会发现 Flutter 非常容易上手,因为他们已有的知识都很容易迁移过去。我曾用 React Native 开发应用,之后开始用 Flutter 的时候发现自己一上来就能熟练使用后者了。但我不得不说,Flutter 的发展已经超越了单纯的移动开发 SDK。特别是随着蜂鸟项目的诞生,Flutter 实现了真正的跨平台化。因此,当 Flutter 可以让开发者在不同平台间共享相同的代码库时,我相信开发者将更加重视 Dart 了。
- Dart 得到了一家科技巨头的支持
当你花费大量时间学习一种新技术时,你会格外关注该技术的过去、现在和未来发展。花了几个月的时间学习新东西后,你最怕的就是看到这门技术逐渐过时、被弃用或被行业标准抛弃。
就 Dart 语言来说,其它事情你都可以担心,唯独不用操心 Dart 语言本身的开发和维护工作。Dart 是谷歌内部发展最快的语言之一,其内部产品如 Adwords、Flutter、Fuchsia、AngularDart 等等都在使用它。谷歌以外,阿里巴巴、Adobe、MailChimp、JetBrains 等公司也在生产环境中使用这种语言。
经常有企业开发出新的语言,但他们都会保持对语言的控制权。由于 Dart 从一开始就是开源的,开发者甚至不必担心授权许可问题之类的破事儿。就算谷歌破产了,开源的 Dart 也没那么容易被击垮。
- Dart 成功解决了很多问题
Dart 可以用 AOT 或者 JIT 编译。Flutter 充分利用了 Dart 的这一优势,从而使用 JIT 编译通过热重载之类的方式加速了开发流程,并使用 AOT 编译在应用发布时提供更好的优化。Flutter 提升开发者效率的部分原因是它默认启用了热重载(Hot Reloading)。如果你是 Java 或 Swift 开发者,之前还了解过 React Native,那么你肯定知道热重载功能有多大用途。它可以节约大量时间,从而提高生产效率。
Dart 的行事风格似乎非常高效。我知道你想说什么:“Javascript 已经很好了,它可以解决我能遇到的所有问题,我可以用它做任何事情,所以为什么我要关心 Dart?“说起来,其实我自己就是 Javascript 开发者,我非常喜欢 JS 生态系统。但我并不会武断地排斥为特定任务寻找最佳工具。Javascript 并不是为了现在这么复杂的用途设计的,它是一种简单的脚本语言,初衷只是为了在浏览网站时添加一些交互性。现在 Javascript 实际上对所有行业来说都是不可或缺的一部分。大家用 JS 开发 Web 应用、移动应用、桌面应用、服务器,用它做各种疯狂的事情。Javascript 的现实应用范围已经远远超过了它的初衷。
但 Dart 就不一样了。从一开始,Dart 背后的团队就以跨平台的思维来开发它。Dart 在很多问题上比 Javascript 效率更高,因为它设计之初就是要解决这些问题的。
然而,就算 JS 在服务器上非常成功,它也并不是为此而设计的。但 Dart 恰恰相反——意味着它通过隔离方式带来了真正的并行能力,此外还有其它种种优势。它们”应该是“轻量级的,所以你应该能同时跑很多副本,这些副本真正运行在不同的线程上,并且没有锁定,只有异步消息传递(是的,Dart 中的隔离方式很受 Erlang 的启发)。——Ladislav-Thon
结 论
我开发应用程序、为各种项目工作已经有很长时间了。拿工资的感觉很好,但你想要的不仅仅是工资,不是吗?Dart 让开发者有很顺滑的体验,开发者和 Dart 语言之间几乎没有摩擦。
大多数优秀的程序员不是因为他们期望获得报酬或者受到公众的喜爱而编程,而是因为编程很有趣。——Linus Torvalds
Dart 正在迅速取代其他高度膨胀的语言。它速度快,容易上手,是一个很好的工具,解决了很多问题并提升了生产力。