Dart语言比JavaScript(Node.js)有什么好处

Phi*_*ent 49 javascript node.js dart

就他们试图解决的问题而言,我没有看到Dart的观点.

我读到它是由于JavaScript的缺点而创建的,但是没有给出那些缺点.

有人可以解释学习Dart的好处而不是我学习Node.js吗?

Chr*_*ett 64

主要问题我认为它解决了创建大型多开发人员应用程序的问题.

在Javascript中,我可以编写完全有效的代码:

function x(y) {
 return y*y;      
}

document.write(x(3,4,5));
Run Code Online (Sandbox Code Playgroud)

这将执行得很好,但它显然是一个错误.

现在,由几个开发人员分离函数定义和函数调用,并在几千行代码的代码库上分离几个月.

原始函数x(y)最初可能是函数x(y,z,a),但随后被重构.这是javascript失败的地方,这就是dart有助于解决的问题.

编辑(20135月)除了我上面的答案,我认为这仍然是正确的,我认为表演故事也变得非常引人注目.来自Google I/O的 Lars Bak和Kasper Lund的讲话提供了一些证据.

  • @Raynos当编写错误的代码时,编写好的代码会更容易. (38认同)
  • 文档无法重构您的代码! (23认同)
  • 您可以轻松使用文档来解决此问题.你的所有谚语都是使用限制性更强的工具编写错误的代码更难.这是一个乐队援助,正确的解决方案是不写坏代码. (3认同)
  • @Max并且编写好的代码也更难,因为Dart是限制性的,并且会阻碍它. (3认同)
  • @Raynos呀!因为每个人都始终保持文档最新,文档中永远不会出错! (3认同)
  • 是的,TDD也有帮助,但这是一个手动过程(需要手动代码审查等来强制执行).工具不是银弹,但它有助于提供额外的层. (2认同)

Joa*_*uer 41

技术概述似乎总结的区别相当不错:

  • 类:虽然JavaScript 面向对象的,并且它提供类(至少在其最新版本中),但它实际上是基于原型的语言而不是基于类的语言.虽然这本身并不严重,但它与大多数主要的OO语言不同,这使得大多数人学习起来更加困难.

  • (可选)静态类型:您不能在纯JavaScript中进行静态类型(如:"由编译器检查").优点(和缺点)是众所周知的并且已被广泛讨论.

  • 对库的语言支持:"在此之前加载该文件"是实现库的一种非常原始的方式,大多数现代语言都以某种方式明确支持库.

该页面还提到了工具,但这并不是语言之间的固有差异.当然,静态编译和键入的语言更容易编写好的工具,但这不是编程无法解决的根本区别.

  • 如果*学习者之前没有学过基于课程的OO,我可以以某种方式简化"一天的努力"*.如果有一个*之前已经了解过,那么所谓的"学习"会让事情变得更加艰难.并且"许多JS工具来做库"*是问题的一部分:没有单一的统一方式.如果您的3个库使用3种不同的机制怎么办? (9认同)
  • "这让大多数人都难以学习." 原型OO学习曲线是努力的一天.我怀疑这有任何真正的负面影响."对图书馆的语言支持:"有很多JS工具可以做到,ES6也会有这个.唯一有用的功能是静态类型. (4认同)
  • @Snicolas:基于类是不是面向对象的先决条件.你提到的所有这些功能对于面向对象的语言来说都不是必需的*,它们很常见."面向对象"现在经常被用作"基于类"的同义词,但这根本不是真的. (2认同)