gpt4 book ai didi

angularjs - Angular.js 与 Elm 的优缺点是什么?

转载 作者:行者123 更新时间:2023-12-03 06:04:54 26 4
gpt4 key购买 nike

我正在考虑在浏览器中进行一些响应式(Reactive)编程,并将 angular.js ( http://angularjs.org/ ) 与 Elm ( http://elm-lang.org/ ) 进行比较。

每个的相对好处/问题是什么?

最佳答案

我认为它们是不同的野兽,IMO,尽管它们确实共享尽可能声明性的目标,以及“嘿,让我们按照我们应该做的方式做事”的态度。

现在,与 AngularJS 你仍然在“熟悉”的领域。意思是,你在这里写一些标记,在那里写一些 JS,然后你提供它。与往常一样的工作流程。据我所知,AngularJS 的“创新”在于它使用额外的元素类型扩展了 HTML,以便您可以在标记中声明应用程序的许多方面和行为,然后它的 JS 库包含必要的为您提供模板、路由、数据绑定(bind)、表单验证、本地化等的机制(……写这篇文章让我怀疑 AngularJS 是否有点膨胀。),这构成了一个非常完整的 Web 应用程序开发框架。它促使您以声明式风格编写代码。

榆木你真的进入了新的领域(如果你有一个“典型的”HTML/JS 前端开发背景)领域。这是进行(和思考)GUI 开发的一种不同方式。您将使用一种全新的语言进行编写——专门用于以函数式响应式(Reactive)编程方式创建 GUI——理想情况下,您永远不会(至少不会直接)处理任何传统的 DOM API。 Elm 带有一种“标准库”,它为您提供了随时间创建和操作图形/文本/等的工具。

您的 Elm 语言代码将以完全声明的方式描述您希望 GUI 随着时间的推移和事件(用户输入等)发生的外观和行为。然后,它将全部编译为 HTML/JS/CSS,以便在浏览器上运行。

榆树也很年轻。这取决于您和您的需要来决定这是否是劣势。

我想对我来说,选择 AngularJS 就像我们在 JS 世界中习惯的一样古老的“嘿,让我们试试这个 JS 库/框架”的过程。您获取 lib 文件,将它们添加到您的项目中,然后开始使用其 API。而与 榆木 ,您必须开始以不同的方式处理您的工作流程和解决问题的方法。

AngularJS 为你提供了很多结构,它不同于 Backbone.js,但归根结底,如果你想做一些高级的 GUI 和图形行为,使用 AngularJS 你会回到编写大量如果您使用 Elm,则无需编写管道样板文件。

另一方面,如果您必须开发和发布大型 Web 应用程序 现在 ,到目前为止,我们一直在网络上使用常用的 GUI 小部件,我倾向于说选择 AngularJS,因为它更稳定。

话虽如此,我认为 Elm 是目前前端开发世界中发生的最有趣和最有前途的事情。而且,如果我今天必须开发和发布一些图形繁重的东西,我会选择 Elm,因为人们可以用它用很少的代码行完成非常复杂的 GUI 东西。但我必须首先进入它的思维方式,并处理它非常年轻的事实,将它与现有的 JS 前端代码库集成可能并不容易,甚至不可能在 atm 中实现。

编辑:

截至 2015 年 3 月,Elm 更加健壮,并且有很棒的工具(时间旅行调试器想到了)。

Angular 仍然是一样的。我应该注意到 Angular 的方法,它的大量事情发生在任何时候模型改变的方法(“2 路数据绑定(bind)”)使它完全不适合诸如基于浏览器的游戏之类的东西,而Elm 擅长游戏和需要表现良好的高级 GUI 内容。此外,Elm 现在有一个快速(使用虚拟 dom diff'ing 方法)HTML 库,当您需要用 HTML 说话时。

我对 Elm 的选择是它的类型系统不像 e.g. 那样具有表现力。 haskell 的。有些人可能认为这是在要求奢侈,但相反,它是关于失去表达基本功能的能力。尤其是我们这些经验丰富的 JS 程序员,会受到不够表达的静态类型系统的困扰,因为这意味着我们习惯于在 JS 中轻松表达的多态代码在 Elm 中变成了类型错误,因为缺少例如等级 2 类型。

幸运的是,Elm 中缺少的所有“愿望 list ”功能都不存在,因为正在进行关于它们及其替代方案的讨论。所以可以肯定的是,他们(或最好的替代品)最终会成为这门语言。

关于angularjs - Angular.js 与 Elm 的优缺点是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15490053/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com