Logo JavaScript

Les nouveaux trucs pour JS

Flattr this!

Je ne sais pas si vous avez remarqué, depuis quelques mois, les gros du web se déchaînent pour nous sortir des machins vachement bien. Mais pas toujours pour améliorer JavaScript. Rapide regard sur tout ça.

Google - Dart

Bon j'en avais parlé en septembre. Je n'aime pas l'idée. Fournir une alternative au lieu d'essayer d'assainir une base existante plus que répandue et qui, même si souffre encore d'une mauvaise image, commence à gagner ses lettres de noblesse, ce n'est pas une solution.

Microsoft - Plein de petites bonnes choses

Là pour le coup, c'est de chez eux que vient la bonne surprise à mon sens. Fin novembre 2011, Microsoft a fait une proposition pour améliorer l'ECMAScript et c'est vrai qu'il y a du bon là dedans.

En gros, ils proposent des méthodes supplémentaires pour les objets Math, String et Number. Voilà un récapitulatif :

  • Math.cosh : pour calculer le cosinus hyperbolique
  • Math.sinh : pour calculer le sinus hyperbolique
  • Math.tanh : pour calculer la tangente hyperbolique
  • Math.acosh : pour calculer le cosinus hyperbolique inverse
  • Math.asinh : pour calculer le sinus hyperbolique inverse
  • Math.atanh : pour calculer la tangente hyperbolique inverse
  • Math.log1p : pour le logarithme décimal de (1 + x) d'après un copain, ça pourrait avoir un lien avec les développements limités. N'étant pas vraiment matheux, je m'arrête à ça pour les explications ;
  • Math.log2 : pour calculer le logarithme binaire ;
  • Math.log10 : pour calculer le logarithme décimal ;
  • Math.sign : permet de connaître le signe d'un nombre ;
  • Math.trunc : permet de connaître la partie entière d'un nombre (à ne pas confondre avec Math.floor qui existe déjà et qui retourne l'entier inférieur le plus proche, ce qui n'a pasle même résultat dans le cas des nombres négatifs) ;
  • String.startsWith : détermine si une chaîne commence par le paramètre ;
  • String.endsWith : détermine si une chaîne termine par le paramètre ;
  • String.contains : détermine si le paramètre est présent quelque part dans la chaîne ;
  • String.Repeat : répète x fois la chaîne passée en paramètre ;
  • String.toArray : convertit une chaîne en tableau ;
  • String.reverse : inverse la chaîne ;
  • Number.isFinite : détermine si le nombre est fini ou non (3.0 est fini, pi ne l'est pas) ;
  • Number.isNaN : je suis assez dubitatif là dessus. Un nombre qui pourrait ne pas être alpha-numérique, j'ai dû rater un épisode ;
  • Number.isInteger : détermine si le nombre est un entier ou non ;
  • Number.toInteger : convertit un flottant en entier, peut être l'équivalent d'une troncature.

Si vous voulez tester ces nouvelles fonctions, vous pouvez aller ici et suivre les explications. Ce ne sont en soit pas des évolutions particulièrement révolutionnaires mais la démarche est bien plus saine à mon sens que celle engagée par la création de Dart.

Mozilla - Un longueur d'avance dans le typage

Amélioration dans un sens différent mais toute aussi intéressante, l'ajout de l'inférence de types dans Firefox 9 et qu'ils sont actuellement seuls sur ce terrain. Uh ? Oui, je n'utilise des mots savants que pour avoir l'air d'un mec intelligent :)

Bon en gros : késako ? JavaScript est un langage faiblement typé comme vous le savez certainement. Cela veut dire que lorsque vous utilisez une variable, vous n'avez pas besoin de dire de quel type elle est. En soit, c'est pratique pour les débutants, on peut bidouiller plein de trucs sans se prendre la tête. Le problème, c'est que ça complique la vie aux interpréteurs. Ceux-ci vont donc calculer différents scénarios en fonction des types possibles puis procéder à l'exécution du script en optant alors au fur et à mesure pour les scénarios adaptés à la situation.

L'idée de l'inférence de type est de "tout simplement" deviner quel sera le type de la variable et donc de ne plus y aller en serrant les fesses dents pour que le bon scénario soit retenu. Cette méthodologie semble faire ses preuves. Selon les articles à ce sujet, on va d'une amélioration de la vitesse allant de 25% à 44%. Non négligeable.

Pour plus de détails et des exemples, l'article de LinuxFr est très bien écrit.

Flattr this!

A propos de Mathieu

Ingénieur développeur web dans la vente par correspondance B2B, adepte de nouvelles technologies et d'innovation. Vous pouvez aussi me retrouver sur Twitter @mathrobin
Cette entrée a été publiée dans JavaScript, avec comme mot(s)-clef(s) , , , , , , , , . Vous pouvez la mettre en favoris avec ce permalien.
  • http://www.pure-tentation.fr/ Syndrael

    Pour les ajouts de M$, hormis les Math.* les autres me font un peu sourire.. On peut déja en réaliser une bonne partie avec 1 à 2 lignes de code non ?? Dire qu’il y a des gens qui sont payés pour ça..
    Allez je me lance:
    String.rand : mélange les caractères de la chaine ;
    String.sort : range les caractères de la chaîne ;
    String.rsort : range les caractères de la chaîne (dans l’autre sens);
    String.nimp: rajoute ‘n’imp..’ au milieu de la chaine (ou à la fin si un seul caractère)
    ..Je peux venir chercher mon chèque ?
    S.

    • http://www.mathieurobin.com/ Mathieu

      Tout à fait d’accord avec toi, ce sont des choses qu’on peut facilement faire nous même du côté des méthodes de String, mais sincèrement, cherche une astuce « startWith » sur Google. Honnêtement, je suis prêt à parier que tu vas trouver à l’aise une dizaine de versions en tout genre. Entre la comparaison caractère par caractère, l’expression régulière, la casse ou pas, etc… Autant définir une seule et unique méthode qui sera de plus native aux navigateurs et donc intrinsèquement plus rapide qu’un code « astuce » JS.
      Ceci dit, si tu veux une fonction qui ne « sert à rien », cherche du côté de String.big() ou encore String.bold() 😉

Articles liés