Three.js: Revisiter le guide de style?

Créé le 19 juil. 2018  ·  16Commentaires  ·  Source: mrdoob/three.js

Je suis sûr que cela ouvre une boîte de vers, mais le [style guide] semble un peu daté et j'aimerais suggérer 2 changements

préférez const et let à var ?

Je ne sais pas pourquoi var est préféré (on m'a dit de changer en var dans un PR récent). Je suppose que c'est là que ça a commencé et parce que const et let sont nouveaux. Mais maintenant que la base de code utilise des modules ES5, il semble que toute raison de conserver var ait disparu depuis longtemps. En raison des lignes import , pour que le code fonctionne sur les navigateurs qui ne prennent en charge que var le code doit être exécuté via un transpiler. Ce même transpileur convertit/va déjà convertir const et let en var .

De plus, il y a des avantages objectifs concrets à utiliser const et let sur var . Les deux sont limités aux accolades au lieu de la portée de la fonction. Ni créer de variables globales contrairement à var . Bien sûr, une grande partie du code utilise maintenant var (bien que IIRC eslint puisse corriger cela automatiquement). Changer le linter pour exiger const et let et changer lentement le code hérité empêchera plus d'erreurs et de fuites. De plus, avec const et let utilisés partout, il est possible d'activer la vérification eslint pour des variables plus indéfinies, ce qui, au moins pour moi, a été d'une grande aide.

Il fut un temps où var était plus rapide, mais ce temps est révolu depuis longtemps.

Est-il temps d'arrêter d'utiliser var ?

autoriser les virgules de fin dans les tableaux et objets multilignes

Cela pourrait être une préférence personnelle de M. Doob, mais je suppose que c'est plus qu'il reste des jours d'IE. IE ne prenait pas en charge la virgule de fin, mais maintenant que le transpilage est en cours, les virgules de fin sont supprimées par le transpileur pour la compatibilité avec IE. Pour les développeurs, les virgules de fin sont une victoire car elles conduisent à moins d'erreurs. Des erreurs qui sont généralement détectées, mais des erreurs qui nécessitent souvent au moins une itération pour être détectées, s'exécutant dans le navigateur et voyant l'erreur de syntaxe, puis revenir en arrière et modifier les virgules. Au moins d'après mon expérience, les virgules de fin évitent ce problème.

Par virgules de fin dans les tableaux et objets multilignes, je veux dire par exemple

 const sizes = [
     100,
     200,
     300,
 ];

et

 const options = {
    width: 100,
    height: 200,
    depth: 300,
};

Avec des virgules de fin, l'ajout ou la suppression de lignes ne nécessite de traiter qu'une seule ligne. Avec les virgules de fin, cela signifie qu'il faut toujours être conscient de la dernière virgule et la supprimer ou l'ajouter.

Bien sûr, peu importe ce qui est décidé, je vais suivre le guide des PR. J'ai juste pensé que je demanderais lorsque le code est passé aux modules ES5 s'il était temps de revoir une partie du guide de style (notez que la partie var n'est pas réellement dans le guide de style.)

Suggestion

Commentaire le plus utile

Les interprètes JS suppriment cette virgule ces jours-ci ?

Tous les navigateurs ont été d'accord avec cette virgule dans les tableaux et les objets pendant > 10 ans, sauf IE

Permettez-moi d'ajouter plutôt que de considérer cela comme une chose étrange, un autre POV est que la syntaxe est en fait la virgule est requise, c'est juste que le navigateur vous donne une pause et ne nécessite pas la dernière. L'étrange d'une personne est l'embellissement d'une autre personne. Je trouve que la cohérence de chaque ligne est la même plus personnellement que la dernière ligne est différente. Bien sûr, ce sont des préférences personnelles. Je ne fais que les évoquer d'une autre façon de voir les choses.

en ce qui concerne les différences, j'ai trouvé ces comparaisons en ligne

pas de virgule de fin diff ajoutant une ligne

virgule finale diff ajoutant une ligne

Tous les 16 commentaires

Il fut un temps où la var était plus rapide, mais ce temps est révolu depuis longtemps.

Sur quoi vous basez-vous ? IIRC la dernière fois que nous avons testé cela, il n'y avait pas de différence pour const mais let était un peu plus lent. Ce serait bien de voir des tests mis à jour à ce sujet.

autoriser les virgules de fin dans les tableaux et objets multilignes

Tout à fait d'accord avec ce changement, s'il n'y a pas de problèmes avec IE (nous voulons toujours prendre en charge au moins IE 10 et 11, n'est-ce pas ?).

Il fut un temps où la var était plus rapide, mais ce temps est révolu depuis longtemps.

Sur quoi vous basez-vous ? IIRC la dernière fois que nous avons testé cela, il n'y avait pas de différence pour const mais let était un peu plus lent. Ce serait bien de voir des tests mis à jour à ce sujet.

Oui, certains chiffres aideraient à prendre cette décision.

autoriser les virgules de fin dans les tableaux et objets multilignes

Par virgules de fin dans les tableaux et objets multilignes, je veux dire par exemple

const sizes = [
    100,
    200,
    300,
];

Mon cerveau lit ça comme ça :

 const sizes = [
     100,
     200,
     300, undefined
 ];

Les interprètes JS suppriment cette virgule ces jours-ci ?

Personnellement, je ne vote pas pour autoriser les virgules de fin dans les tableaux multilignes car je trouve cela inhabituel à lire aussi.

Pour moi, le but des virgules de fin est qu'il est plus rapide d'ajouter et de supprimer des éléments, ainsi que de les réorganiser par couper/coller. Pas besoin de s'inquiéter si vous venez de couper le dernier élément ou non, chaque ligne est la même. Quant à voir undefined , il est facile d'éviter cela si vous savez qu'il n'y a qu'un seul élément par ligne - et dans les cas où le tableau est sur une seule ligne comme [1, 2, 3, 4, 5] vous n'ajouteriez pas de virgule à la fin.

D'un autre côté, je ne pense pas que cela importe de toute façon. Le passage à const / let est la question importante ici.

... mais maintenant que le transpilage se produit ...

Nous ne transpilons pas, n'est-ce pas ? Rollup remplace simplement la syntaxe d'import/export ES6 tout en laissant tout le reste seul, à moins que vous n'ajoutiez des plugins comme let / const sont pris en charge dans IE11 de toute façon.

Les virgules de fin ont également un objectif beaucoup plus large que la simple "facilité d'utilisation". Dans les projets plus importants auxquels de nombreuses personnes contribuent, il est utile d'utiliser des éléments tels que git blame pour savoir qui est responsable de quel morceau de code.

Donc, énonçant l'évidence ici: s'il y a des choses répertoriées sur plusieurs lignes qui ont été ajoutées par @mrdoob , et que j'y ajouterais plus tard une ligne, mon nom serait affiché sur la dernière ligne de code que je n'ai pas écrite.

Je suis personnellement contre l'utilisation de virgules de fin pour la même raison que les personnes qui m'ont précédé, mais j'en vois les avantages et je m'y habitue maintenant que nous l'appliquons également au bureau depuis cette année.

Les interprètes JS suppriment cette virgule ces jours-ci ?

Ouais.

Concernant l'utilisation de let vs var :

La différence entre let et var n'a plus d'importance de nos jours s'il s'agit de performances. V8 et Spidermonkey (Firefox) ont de grandes optimisations ces jours-ci qui fonctionnent très bien.

Voir ce post pour une élaboration (assurez-vous d'exécuter les extraits réels pour voir que la différence est à peu près négligeable maintenant): https://stackoverflow.com/questions/37792934/why-is-let-slower-than-var- in-a-for-loop-in-nodejs

La réponse acceptée à cette question SO souligne également les différences entre var et let d'un point de vue fonctionnel, car ils ont tous deux des significations et des cas d'utilisation _très_ différents au cas où ce n'est pas clair à qui que ce soit.

L'utilisation de const pour des variables qui ne changent jamais est une évidence. Si le moteur javascript peut voir qu'une variable est déclarée avec const , il sait que sa valeur ne changera plus jamais, elle peut donc être fortement optimisée.

Juste mes 2 cents.

Pour référence:

Les virgules de fin sont l'un des meilleurs modèles js que j'ai vus et rendent les différences beaucoup plus lisibles.

Les interprètes JS suppriment cette virgule ces jours-ci ?

Tous les navigateurs ont été d'accord avec cette virgule dans les tableaux et les objets pendant > 10 ans, sauf IE

Permettez-moi d'ajouter plutôt que de considérer cela comme une chose étrange, un autre POV est que la syntaxe est en fait la virgule est requise, c'est juste que le navigateur vous donne une pause et ne nécessite pas la dernière. L'étrange d'une personne est l'embellissement d'une autre personne. Je trouve que la cohérence de chaque ligne est la même plus personnellement que la dernière ligne est différente. Bien sûr, ce sont des préférences personnelles. Je ne fais que les évoquer d'une autre façon de voir les choses.

en ce qui concerne les différences, j'ai trouvé ces comparaisons en ligne

pas de virgule de fin diff ajoutant une ligne

virgule finale diff ajoutant une ligne

Commençons par les let et const premier. Un pas après l'autre.

screen shot 2018-07-30 at 5 03 00 pm

Je pense que ces horaires sont trop proches pour appeler. j'obtiens des résultats différents

screen shot 2018-07-31 at 9 13 50

Bien que dans Chrome 70, ils ne soient pas proches à distance

screen shot 2018-07-31 at 9 15 36

pendant qu'on y est

screen shot 2018-07-31 at 9 19 20

screen shot 2018-07-31 at 9 20 18

Permettez-moi d'ajouter un point de vue supplémentaire pour les virgules de fin 😜 Vous pouvez voir les virgules de fin comme similaires au point-virgule

C'est un code parfaitement légal

 {
      doThis();
      doThat();
      doOther()
 }

La dernière ligne manque le point-virgule. Un POV est de voir la virgule comme la même chose. C'est peut-être comme l'illusion des gens/de la lampe.

Que vous voyiez 2 personnes ou un bâton de lampe, les deux sont valables. Mais dans ce cas, avec une virgule puisque les deux POV correspondent ("la virgule à la fin ressemble à , non définie" vs "la virgule manquante semble incohérente"), l'un a des avantages objectifs et l'autre non ...?

J'ai essayé d'ajouter un const quelque part dans le code et il ne compile plus...

screen shot 2018-07-30 at 5 58 46 pm

@mrdoob Le format de sortie doit être défini sur ES6 au lieu de ES ou ES5 .

Clôture en faveur du #6419.

Cette page vous a été utile?
0 / 5 - 0 notes