Three.js: ¿Revisando la guía de estilo?

Creado en 19 jul. 2018  ·  16Comentarios  ·  Fuente: mrdoob/three.js

Estoy seguro de que esto es abrir una lata de gusanos, pero la [guía de estilo] parece un poco anticuada y me gustaría sugerir 2 cambios

prefieres const y let a var ?

No sé por qué se prefiere var (se le dijo que cambiara a var en un PR reciente). Supongo que es porque ahí es donde empezó y porque const y let son nuevos. Pero ahora que la base de código está usando módulos ES5, parece que cualquier razón para mantener var ha desaparecido. Debido a las líneas import , para que el código funcione en navegadores que solo admiten var el código debe ejecutarse a través de un transpilador. Ese mismo transpilador ya convertirá const y let en var .

Además, hay objetivos positivos concretos al usar const y let sobre var . Ambos tienen un ámbito de llaves en lugar de ámbito de función. Tampoco cree variables globales a diferencia de var . Claro, gran parte del código usa var ahora (aunque IIRC eslint puede corregirlo automáticamente). Cambiar el linter para requerir const y let y cambiar lentamente el código heredado evitará más errores y fugas. Además, con const y let usados ​​en todas partes, es posible habilitar la comprobación de eslint en busca de más variables indefinidas, lo que al menos para mí ha sido de gran ayuda.

Hubo un tiempo en el que var era más rápido, pero ese tiempo ya pasó.

¿Es hora de dejar de usar var ?

permitir comas finales en matrices y objetos de varias líneas

Esto podría ser una preferencia personal del Sr. Doob, pero supongo que es más que queda de los días de IE. IE no admitía una coma al final, pero ahora que se está realizando la transpilación, el transpilador elimina las comas al final para que sea compatible con IE. Para los desarrolladores, las comas finales son una ventaja, ya que conducen a menos errores. Errores que generalmente se detectan, pero errores que a menudo requieren al menos una iteración para detectar, ejecutar en el navegador y ver el error de sintaxis, luego retroceder y editar comas. Al menos en mi experiencia, las comas finales evitan ese problema.

Por comas finales en matrices y objetos de varias líneas me refiero, por ejemplo,

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

y

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

Con las comas finales, agregar o eliminar líneas solo requiere tratar con una sola línea. Con comas finales, significa tener siempre en cuenta que la última coma es y eliminarla o agregarla.

Por supuesto, lo que se decida está bien, seguiré la guía para relaciones públicas. Solo pensé en preguntar cuando el código cambió a los módulos ES5 si era hora de volver a visitar algunas de las guías de estilo (tenga en cuenta que la parte var no está en realidad en la guía de estilo).

Suggestion

Comentario más útil

¿Los intérpretes de JS eliminan esa coma estos días?

Todos los navegadores han estado bien con esa coma en matrices y objetos durante> 10 años, excepto IE

Permítanme agregar, en lugar de verlo como algo extraño, otro punto de vista es que la sintaxis es en realidad la coma se requiere, solo el navegador le brinda un descanso y no requiere el último. Lo extraño de una persona es el embellecimiento de otra. Encuentro que la consistencia de que cada línea es la misma es más agradable personalmente que la última línea que es diferente. Por supuesto, esas son preferencias personales. Solo les menciono otra forma de ver las cosas.

En cuanto a las diferencias, encontré estas comparaciones en línea.

sin diferencia de coma final agregando una línea

diferencia de coma final agregando una línea

Todos 16 comentarios

Hubo un tiempo en que var era más rápido, pero ese tiempo ya pasó.

¿En qué estás basando esto? IIRC la última vez que probamos esto, no hubo diferencia para const pero let fue algo más lento. Sería bueno ver algunas pruebas actualizadas sobre esto.

permitir comas finales en matrices y objetos de varias líneas

Definitivamente estoy de acuerdo con este cambio, si no hay problemas con IE (todavía queremos admitir al menos IE 10 y 11, ¿verdad?).

Hubo un tiempo en que var era más rápido, pero ese tiempo ya pasó.

¿En qué estás basando esto? IIRC la última vez que probamos esto, no hubo diferencia para const pero let fue algo más lento. Sería bueno ver algunas pruebas actualizadas sobre esto.

Sí, algunos números ayudarían en esta decisión.

permitir comas finales en matrices y objetos de varias líneas

Por comas finales en matrices y objetos de varias líneas me refiero, por ejemplo,

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

Mi cerebro lo lee así:

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

¿Los intérpretes de JS eliminan esa coma estos días?

Personalmente, no voto para permitir las comas finales en matrices de varias líneas, ya que también me resulta inusual leer.

Para mí, el propósito de las comas finales es que hace que sea más rápido agregar y eliminar cosas, así como reordenarlas mediante cortar / pegar. No se preocupe si corta el último artículo o no, todas las líneas son iguales. En cuanto a ver undefined , es fácil evitarlo si sabe que solo hay un elemento por línea, y en los casos en que la matriz está en una línea como [1, 2, 3, 4, 5] , no agregaría una coma al final.

Por otro lado, no creo que importe de ninguna manera. El cambio a const / let es el tema importante aquí.

... pero ahora ese transpiling está sucediendo ...

No nos estamos traspasando, ¿verdad? Rollup simplemente reemplaza la sintaxis de importación / exportación de ES6 mientras deja todo lo demás solo, a menos que agregue complementos como rollup-plugin-buble . Pero let / const son compatibles con IE11 de todos modos.

Las comas finales también tienen un propósito mucho más amplio que simplemente "facilidad de uso". En proyectos más grandes en los que muchas personas contribuyen, es útil usar cosas como git blame para averiguar quién es responsable de qué parte del código.

Entonces, indicando lo obvio aquí: si hay cosas enumeradas en varias líneas que fueron agregadas por @mrdoob , y luego agregaría una línea allí, mi nombre se mostraría en la última línea de código que no escribí.

Personalmente, estoy en contra del uso de comas finales exactamente por la misma razón que la gente dijo antes que yo, pero veo los beneficios y me estoy acostumbrando ahora que también aplicamos esto en la oficina desde este año.

¿Los intérpretes de JS eliminan esa coma estos días?

Sí.

Con respecto al uso de let vs var :

La diferencia entre let y var ya no importa en estos días si se reduce al rendimiento. V8 y Spidermonkey (Firefox) tienen grandes optimizaciones en estos días que funcionan muy bien.

Vea esta publicación para obtener más detalles (asegúrese de ejecutar los fragmentos reales para ver que la diferencia es prácticamente despreciable ahora): https://stackoverflow.com/questions/37792934/why-is-let-slower-than-var- in-a-for-loop-in-nodejs

La respuesta aceptada de esa pregunta SO también señala las diferencias entre var y let desde una perspectiva funcional, ya que ambos tienen _muy_ diferentes significados y casos de uso en caso de que no esté claro a cualquiera.

El uso de const para variables que nunca cambian es una obviedad. Si el motor javascript puede ver que una variable se declara con const , sabe que su valor nunca volverá a cambiar, por lo que se puede optimizar en gran medida.

Solo mis 2 centavos.

Para referencia:

Las comas finales es uno de los mejores patrones js que he visto y hace que las diferencias sean mucho más legibles.

¿Los intérpretes de JS eliminan esa coma estos días?

Todos los navegadores han estado bien con esa coma en matrices y objetos durante> 10 años, excepto IE

Permítanme agregar, en lugar de verlo como algo extraño, otro punto de vista es que la sintaxis es en realidad la coma se requiere, solo el navegador le brinda un descanso y no requiere el último. Lo extraño de una persona es el embellecimiento de otra. Encuentro que la consistencia de que cada línea es la misma es más agradable personalmente que la última línea que es diferente. Por supuesto, esas son preferencias personales. Solo les menciono otra forma de ver las cosas.

En cuanto a las diferencias, encontré estas comparaciones en línea.

sin diferencia de coma final agregando una línea

diferencia de coma final agregando una línea

Comencemos con let y const primero. Un paso a la vez.

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

Creo que esos tiempos están demasiado cerca para llamar. Obtengo resultados diferentes

screen shot 2018-07-31 at 9 13 50

Aunque en Chrome 70 no están ni remotamente cerca

screen shot 2018-07-31 at 9 15 36

mientras estamos en eso

screen shot 2018-07-31 at 9 19 20

screen shot 2018-07-31 at 9 20 18

Permítanme agregar un punto de vista más para las comas finales 😜 Puede ver las comas finales como similares al punto y coma

Este es un código perfectamente legal

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

La última línea que falta el punto y coma. Un punto de vista es ver la coma como lo mismo. Tal vez sea como la ilusión de gente / lámpara.

Ya sea que veas a 2 personas o una lámpara, ambos son válidos. Pero en ese caso, con una coma, ya que ambos puntos de vista se ajustan ("la coma al final parece, indefinida" vs "la falta de coma parece inconsistente") uno tiene beneficios objetivos y el otro no ...?

Intenté agregar const en algún lugar del código y ya no se compila ...

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

@mrdoob El formato de salida debe establecerse en ES6 lugar de ES o ES5 .

Cierre a favor del # 6419.

¿Fue útil esta página
0 / 5 - 0 calificaciones