Journal Angular 1 vs Angular 2

2
8
juin
2016

Angular 2 vient de sortir il y a quelques semaines et je n’ai pas été emballé :
- Typescript y est mis a l'honneur. Je ne comprend pas pourquoi on veut faire de javascript, langage fonctionnel faiblement typé, un langage objet fortement typé. J'ai fait 10 ans de Java, j'aime bien les langages tout objet fortement typé, ce n'est pas une histoire de goût, c'est juste que je trouve ça bizarre. De plus typescript est promu par microsoft, qui est une boite dont je n'aime ni la mentalité ni les technos.
- Angular 2 est écrit en typescript mais autorise javascript et dart. Les projects open source sur github seront donc soit en javascript soit dart soit typescript. Ça va introduire une complexité supplémentaire.
- L'ecosysteme autour de la version 2 est inexistant. Le generateur de code est en v0.8 avec la mention “tout peut casser a tout moment”. Les modules tierces (aka directive) que j'utilise en angular v1 ne semble pas pressés de proposer quoi que ce soit en v2. Donc l'ecosysteme est inexistant et face a la concurrence je ne sais pas si il va émerger.

Si je devais oser un parallèle, je comparerais angular a Struts. Au debut des annees 2000, Struts fait son apparition dans le monde java et devient la référence. Les ssii l'aime bien, une projet a N écrans, en struts 1 ça fait M jours homme de boulot. Puis struts 1.1 apporte pas mal de fonctionnalités, puis struts 1.2 puis 1.3. Après cela, ils se fendent d'une V2 en présentant cette version comme celle de la maturité. Ca n'a jamais marché et les développeurs lui ont préféré spring-mvc ou autres jsf/tapestry/wicket.

Bref, si j'avais un conseil, ça serait de ne pas se précipiter sur angular 2…

  • # un ancien fan

    Posté par (page perso) . Évalué à 9.

    J'étais très fan de la v1, j'en ai fait beaucoup, vraiment beaucoup …
    J'ai évidemment sauté sur la v2, et j'en suis arrivé, peu ou prou, aux mêmes conclusions.
    La V2 est plus orienté composant (ce qui est une très bonne chose), ça m'a plus fait pensé à un react a la sauce angular. Mais la syntaxe est trop hiéroglyph'isé ;-), et le côté typescript transpilé m'a un peu refroidi aussi.
    Alors, tant qu'à faire des composants, et ne voulant pas plonger dans react (jsx est trop abscons), je me suis lancé dans riotjs ; et c'est quasi du pur bonheur.
    Certes, c'est moins cadré qu'un angular/react, mais ça laisse une plus grande liberté (très facile d'intégrer des libs tierces)
    Certes, il faut rajouter des polyfills (fetch, promise …), car la lib étant très petite, elle n'intègre pas grand chose …
    Mais j'ai vraiment trouvé ma lib composant, genre couteau suisse, que tu intègres très facilement partout …
    Ces gars là ont trouvé/inventé la façon la plus simple/naturelle de réaliser des composants web.
    Après la liberté impose quand même au dev de se faire violence pour faire bien (pour des gros projets).

  • # Fork ou nouvelle version?

    Posté par (page perso) . Évalué à 7.

    Je connais AngularJs 1.3/4/5 depuis peu, mais j'ai entendu parler de Angular 2 dès mon arrivée dans ce milieu.

    L'impression que ca me donne c'est que dans Angular 2, ils ont voulu faire quelque chose de tout nouveau et n'ont pas cherché la compatibilité ascendante pour s'enlever une dette technique qui fait mal aux pieds. D'ailleurs Angular 1.x est appelé AngularJs avec Google en dessous, alors que Angular 2 est appelé Angular tout court, et Google a disparu de la page principale.

    Je penche donc sur deux projets distincts qui vont évoluer en parallèle, parfois avec des cross overs quand une nouvelle fonctionnalité intéressante de l'un sera transmise à l'autre, mais tu ne verras pas de modules ou application compatibles Angular 1 && 2.

    Puis un beau jour un des deux projets va se renommer tout seul et la confusion disparaîtra.

    Mais de toutes façons on sera déjà passé à la nouvelle techno à la mode donc personne n'y fera attention.

  • # riotjs

    Posté par . Évalué à 6. Dernière modification le 09/06/16 à 00:17.

    Mon chouchou, riotjs, est simple :

    • la séparation entre html et javascript est claire et propre
    • et donc pas de nouvelle syntaxe à coucher dehors à devoir apprendre
    • le petit guide et les différents exemples du site officiel se suffisent à eux-même pour comprendre l'ensemble de la bibliothèque

    et pourtant puissant :

    • routing
    • templating
    • event handler
    • pas de besoin de plus ;)

    bref, après quelques tests on l'adopte vite et c'est difficile d'utiliser autre chose (angular, react, polymer, barbone…).

  • # Too soon

    Posté par (page perso) . Évalué à 6.

    Angular 2 vient de sortir il y a quelques semaines et je n’ai pas été emballé

    Ah, j'aurais loupé la sortie ? Pour moi Angular 2 est toujours en RC1

    L'ecosysteme autour de la version 2 est inexistant.

    Bein oui, c'est pas sorti et ça fait des mois qu'ils disent «attention, on peut tout casser du jour au lendemain» Du coup forcément, tout le monde attend.

    Après pousser vers typescript, pourquoi pas. C'est sûr que les copier/coller de bouts de code sur stackoverflow risquent de donner des bêtes hybrides monstrueuses mais bon concrètement, quelqu'un qui sait lire du typescript sait lire du javascript donc il suffira de "transpiler".

    Je dis pas que c'est tout beau mais l'avenir d'Angular 2 (qui gagnerait sûrement à changer de nom) n'est peut-être pas si noir.

  • # TypeScript

    Posté par (page perso) . Évalué à 10. Dernière modification le 09/06/16 à 03:36.

    Typescript y est mis a l'honneur. Je ne comprend pas pourquoi on veut faire de javascript, langage fonctionnel faiblement typé, un langage objet fortement typé.

    Tu te trompes lourdement sur ce qu'est TypeScript !

    Code TypeScript :

        class Greeter {
          greeting: string;
    
          constructor(message: string) {
            this.greeting = message;
          }
    
          greet(): string {
            return `Hello, ${this.greeting}`;
          }
        }
    
        let greeter = new Greeter("world");
    
        let button = document.createElement('button');
        button.textContent = "Say Hello";
        button.onclick = () => alert(greeter.greet());
    
        document.body.appendChild(button);
    

    Code ES6 généré :

        class Greeter {
          constructor(message) {
            this.greeting = message;
          }
    
          greet() {
            return `Hello, ${this.greeting}`;
          }
        }
    
        let greeter = new Greeter("world");
    
        let button = document.createElement('button');
        button.textContent = "Say Hello";
        button.onclick = () => alert(greeter.greet());
    
        document.body.appendChild(button);
    

    C'est des annotations, c'est cosmetique, ca n'a aucun impact sur l'execution (et donc ca ne change en rien la nature de JavaScript et notamment son typage).
    C'est juste une aide pour ton IDE : avoir l'autocompletion et te dire que si tu ecris body.appendChild("Hello world") tu as probablement fait une erreur. Et il y aucune obligation de tout annoter, tu peux meme renommer un fichier .js existant en .ts et ca fonctionnera parfaitement.

    C'est le meme principe que d'ecrire :

        /**
         * @param name {String}
         */
        function display(name)
    

    vs

        function display(name: string)
    

    typescript est promu par microsoft, qui est une boite dont je n'aime ni la mentalité ni les technos.

    Licence Apache, multiplateforme et le developpement est completement ouvert. Tu peux faire des pull requests et discuter avec Hejlsberg si ca t'amuse.
    Et puis Google une entreprise concurrente de Microsoft, a adopté TypeScript pour Angular 2, c'est plutot bon signe pour TypeScript…

    Pour les autres, je vous recommande cette video recente qui vulgarise TypeScript : What's New in TypeScript?

    • [^] # Re: TypeScript

      Posté par (page perso) . Évalué à 4.

      J'ajouterai mon experience personnelle : TypeScript est tres chouette et les nombreux retours sur Internet (blogs, commentaires sur Hacker News et Reddit…) vont dans ce sens egalement.

      Avoir des annotations permet de documenter le code et en plus d'eviter pas mal d'erreurs et du coup de refactorer son code sans prise de tete.
      La plupart des librairies existantes sont déjà annotées par la communauté : https://github.com/DefinitelyTyped/DefinitelyTyped (ca s'appelle des "type definitions").

      Dans l'exemple donné au dessus, ca génère du ES6 mais de la meme facon que Babel, ca peut aussi generer du ES5 (et meme du ES3). D'ailleurs plusieurs personnes ont suggéré d'utiliser Babel pour la partie transpilation.

      Pour AngularJS 1, comme beaucoup de monde, j'ai des gros problemes de perf avec :/
      De maniere generale je prefere la syntaxe de React (du JS tout simplement !) plutot que la syntaxe des templates HTML de Angular (ng-for, ng-repeat…)

    • [^] # Re: TypeScript

      Posté par . Évalué à 2.

      Merci pour ta reponse, ca me donne envie de regarder tout ca plus en detail.

  • # qooxdoo

    Posté par . Évalué à 1.

    J'ai fait de l'angular 1 mais la syntaxe vraiment bizarre et la difficulté d'avoir du code générique (que ça soit JS ou HTML) m'a fait peur pour de gros projets. En plus, gérer la dispositions de l'interface via HTML/CSS me gonfle pas mal.

    qooxdoo permet de tout écrire en JS (même les interfaces) avec une surcouche OO pour facilement organiser son code. Ça vient avec tout un ensemble de widgets pour la partie graphiques et un ensemble de classes pour la manipulation de données et la communication.

    Bac à sable

  • # Savoir accepter les évolutions

    Posté par . Évalué à 0.

    Le changement est inévitable et c'est valable pour javascript. Si tu ne vois pas pourquoi TypeScript est privilégié alors tu ne dois pas trop aimer ES6 et les futures évolutions du langage JS?

    Cela ne veut pas dire qu'un modèle est supérieur à un autre mais simplement quand l'état actuel de l'art, les standards et l'industrialisation des développements suivent certaines orientations. TypeScript permet aujourd'hui d'exploiter plus facilement ces standards via la transpilation et autres astuces. À termes, je ne doute pas que ECMASCRIPT (JS) pourra se passer des "typed superset" (car il le deviendra naturellement).

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.