web-dev-qa-db-fra.com

Quels sont les avantages et les inconvénients d'Angular.js par rapport à Elm?

Je cherche à faire de la programmation réactive dans le navigateur et à comparer angular.js ( http://angularjs.org/ ) avec Elm ( http://Elm-lang.org / ).

Quels sont les avantages/problèmes relatifs de chacun?

50
interstar

Je pense que ce sont des bêtes différentes, OMI, bien qu'ils partagent le but d'être aussi déclaratif que possible, et une attitude de "hé, faisons les choses Comme nous devrions les faire ".

Maintenant, avec AngularJS vous êtes toujours en territoire "familier". Cela signifie que vous écrivez du balisage ici, que vous écrivez du JS là-bas, puis que vous le servez. Même flux de travail que d'habitude. L '"innovation" d'AngularJS, pour autant que je sache, est qu'elle étend HTML avec des types d'éléments supplémentaires pour que vous puissiez déclarer beaucoup d'aspects et de comportement de votre application directement dans le balisage, puis sa lib JS contient la machinerie nécessaire pour vous donner des modèles, un routage, une liaison de données, une validation de formulaire, localisation, etc. (... écrire cela me fait me demander si AngularJS souffre peut-être d'un peu de ballonnement.), ce qui en fait un cadre de développement d'applications Web très complet. Et cela vous pousse à écrire votre code dans un style déclaratif.

Avec Elm vous entrez vraiment dans un nouveau territoire (si vous avez un arrière-plan de développement frontend HTML/JS "typique"). C'est une façon différente de faire (et de penser) au développement de GUI. Vous écrirez dans un tout nouveau langage - spécialement conçu pour la création d'interfaces graphiques de manière réactive fonctionnelle - et idéalement, vous ne traiterez jamais (du moins pas directement) avec les API DOM traditionnelles. Elm est livré avec une sorte de "bibliothèque standard" qui vous donne des outils pour créer et manipuler des graphiques/textes/etc dans le temps.

Votre code de langue Elm décrira, de manière totalement déclarative, ce que vous voulez que votre interface graphique ressemble et se comporte au fil du temps et des événements (entrée utilisateur, etc.). Ensuite, il compilera tout cela en HTML/JS/CSS afin qu'il s'exécute sur le navigateur.

L'orme est très jeune aussi. C'est à vous et à vos besoins de décider si c'est un inconvénient ou non.

Je suppose que choisir AngularJS est exactement le même vieux processus "hey essayons cette chose JS lib/framework" auquel nous sommes habitués dans le monde JS. Vous récupérez les fichiers lib, les ajoutez à votre projet et commencez à utiliser son API. Alors qu'avec Elm, vous devez commencer à aborder différemment votre flux de travail et les solutions aux problèmes.

AngularJS vous donne beaucoup de structure, et c'est différent, disons, de Backbone.js, mais à la fin de la journée, si vous voulez faire des GUI avancées et des comportements graphiques, avec AngularJS vous êtes de retour pour écrire une tonne de plomberie trucs que vous n'auriez pas à écrire si vous utilisiez Elm.

D'un autre côté, si vous devez développer et publier une grande application web en ce moment, avec les widgets GUI habituels que nous utilisons jusqu'à présent sur le web, je serais enclin à dire go pour AngularJS car il est plus stable.

Cela dit, je pense que Elm est les choses les plus intéressantes et prometteuses qui se produisent dans le monde du développement frontend en ce moment. Et, si je devais développer et publier des trucs graphiques lourds aujourd'hui, je irais pour Elm, car on peut faire des trucs GUI très complexes avec lui en très peu de lignes de code. Mais je devrais d'abord entrer dans son état d'esprit, et gérer le fait qu'il est très jeune et l'intégrer à une base de code frontale JS existante pourrait ne pas être facile ni même possible.

Modifier:

Depuis mars 2015, Elm est beaucoup plus robuste, et il existe un excellent outil pour cela (le débogueur de voyage dans le temps me vient à l'esprit).

L'angulaire reste, eh bien, plus ou moins identique. Je dois noter que l'approche d'Angular, avec son approche d'une tonne de choses qui se produisent chaque fois qu'un modèle change ("liaison de données bidirectionnelle") la rend totalement inadaptée à des choses telles que les jeux sur navigateur, alors que Elm excelle dans les jeux et les éléments avancés de l'interface graphique qui doivent bien fonctionner. De plus, Elm dispose désormais d'une bibliothèque HTML rapide (en utilisant l'approche de dom diff'ing virtuel), lorsque vous devez parler en HTML.

Mon os à choisir avec Elm est que son système de caractères n'est pas aussi expressif que par ex. Haskell. Certains peuvent penser que cela demande du luxe, mais au contraire, il s'agit de perdre la capacité d'exprimer des fonctions de base. En particulier, nous, programmeurs chevronnés de JS, souffrons de systèmes de type statique pas assez expressifs, car cela signifie que le code polymorphe que nous avons l'habitude d'exprimer facilement en JS, devient une erreur de type dans Elm, en raison du manque de p. Ex. types de rang 2.

Heureusement, toutes les fonctionnalités de "liste de souhaits" qui manquent dans Elm, ne sont pas là à cause des discussions en cours à leur sujet et leurs alternatives. Il est donc fort à parier qu'ils (ou les meilleures alternatives) parviendront finalement à la langue.

74
Alexander

Les mises en page graphiques statiques complexes et l'interactivité sont beaucoup plus simples dans Elm que dans HTML/CSS/tout framework JavaScript. Avec Elm, la complexité accidentelle réside dans les types , mais cela en vaut la peine en savoir plus - ils aident à comprendre, à déboguer et modifier les logiciels mieux, et ils devraient déjà vous être familiers si vous venez d'un arrière-plan de programmation fonctionnelle. Notez que vous pouvez également intégrer Elm dans HTML/JS , donc en théorie, vous pouvez migrer progressivement.

16
thSoft

Elm est beaucoup plus opiniâtre qu'Angular, et notamment en ce qui concerne la gestion des états . Si vous trouvez que l'état devient un problème dans une application conventionnelle Angular, alors vous pourriez être tenté de regarder vers centralisé (état monolithique) en utilisant une approche de style Redux, avec ngrx venant rapidement à l'esprit.

L'orme incarne la notion d'un état central immuable, et était un inspiration pour Redux . Elm applique un seul état immuable avec une fonction de mise à jour pure (réducteur). À mon avis, cela rend la gestion de l'état dans une application Web hautement réactive beaucoup, beaucoup plus simple que la confusion qui peut survenir en utilisant un modèle de type OO dans Angular.

L'orme est idéal pour la plupart des applications, mais il peut devenir un peu plus complexe lorsque vous souhaitez travailler avec des bibliothèques JS externes (par exemple, google maps), car son interface de fonction étrangère (ports) est assez rigide. Le type d'animations nécessaires dans Material Design s'est également révélé difficile pour l'architecture Elm - cela ne veut pas dire qu'il n'y a pas d'animations, mais qu'elles prennent plus de câblage que vous ne le voudriez.

5
Simon H