Three.js: Еще раз заглянули в руководство по стилю?

Созданный на 19 июл. 2018  ·  16Комментарии  ·  Источник: mrdoob/three.js

Я уверен, что это открывает банку с червями, но [руководство по стилю] кажется немного устаревшим, и я хотел бы предложить 2 изменения

предпочитать const и let var ?

Я не знаю, почему предпочтительнее var (в недавнем PR было сказано перейти на var). Я предполагаю, потому что с этого все и началось, и потому что const и let - новые. Но теперь эта кодовая база использует модули ES5, похоже, что никаких причин для сохранения var давно нет. Из-за строк import , чтобы код работал в браузерах, которые поддерживают только var код должен быть запущен через транспилятор. Этот же транспилятор уже конвертирует const и let в var .

Кроме того, есть конкретные объективные преимущества использования const и let сравнению с var . Оба они привязаны к фигурным скобкам, а не к области функций. Также не создавайте глобальных переменных в отличие от var . Конечно, большая часть кода сейчас использует var (хотя IIRC eslint может это исправить автоматически). Изменение линтера на требуемые const и let и медленное изменение устаревшего кода предотвратят больше ошибок и утечек. Также с const и let используемыми везде, возможно, включить проверку eslint для большего количества неопределенных переменных, что, по крайней мере, для меня было огромным подспорьем.

Было время, когда var был быстрее, но это время давно прошло.

Пора перестать использовать var ?

разрешить запятые в многострочных массивах и объектах

Возможно, это личное предпочтение мистера Дуба, но я полагаю, что это больше, чем когда-то еще со времен IE. IE не поддерживает конечную запятую, но теперь, когда происходит транспиляция, конечные запятые удаляются транспилером для совместимости с IE. Для разработчиков конечные запятые - это преимущество, поскольку они приводят к меньшему количеству ошибок. Ошибки, которые обычно перехватываются, но ошибки, для обнаружения которых часто требуется хотя бы одна итерация, запускаются в браузере и видят синтаксическую ошибку, а затем возвращаются и редактируют запятые. По крайней мере, по моему опыту, конечные запятые позволяют избежать этой проблемы.

Под запятыми в многострочных массивах и объектах я, например, подразумеваю

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

а также

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

При добавлении или удалении строк в конце запятые требуется иметь дело только с одной строкой. С конечными запятыми это означает, что всегда нужно помнить о последней запятой и удалять или добавлять ее.

Конечно, все, что было решено, нормально, я буду следовать руководству по PR. Я просто подумал, что, когда код переключился на модули ES5, я просто подумал, что спрошу, не пора ли пересмотреть некоторые из руководств по стилю (обратите внимание, что часть var самом деле отсутствует в руководстве по стилю).

Suggestion

Самый полезный комментарий

В наши дни интерпретаторы JS удаляют эту запятую?

Все браузеры прекрасно справлялись с этой запятой в массивах и объектах в течение> 10 лет, кроме IE.

Позвольте мне добавить, а не смотреть на это как на странную вещь, еще одна точка зрения заключается в том, что синтаксис на самом деле является запятой, это просто браузер дает вам перерыв и не требует последнего. Странность одного человека - украшение другого. Я считаю, что последовательность каждой строки одинакова для меня более приятна, чем последняя строка, которая отличается. Конечно, это личные предпочтения, я просто предлагаю им по-другому взглянуть на вещи.

что касается различий, я нашел эти сравнения в Интернете

без завершающей запятой diff добавление строки

конечная запятая diff добавление строки

Все 16 Комментарий

Было время, когда var был быстрее, но это время давно прошло.

На чем вы это основываете? IIRC, когда мы в последний раз тестировали это, не было разницы для const но let был несколько медленнее. Было бы хорошо увидеть обновленные тесты по этому поводу.

разрешить запятые в многострочных массивах и объектах

Определенно согласен с этим изменением, если с IE нет проблем (мы все еще хотим поддерживать как минимум IE 10 и 11, верно?).

Было время, когда var был быстрее, но это время давно прошло.

На чем вы это основываете? IIRC, когда мы в последний раз тестировали это, не было разницы для const но let был несколько медленнее. Было бы хорошо увидеть обновленные тесты по этому поводу.

Да, некоторые цифры помогут принять это решение.

разрешить запятые в многострочных массивах и объектах

Под запятыми в многострочных массивах и объектах я, например, подразумеваю

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

Мой мозг читает это так:

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

В наши дни интерпретаторы JS удаляют эту запятую?

Я лично не голосую за использование запятых в многострочных массивах, так как я тоже считаю это необычным для чтения.

Для меня цель конечных запятых состоит в том, что они позволяют быстрее добавлять и удалять объекты, а также изменять их порядок путем вырезания / вставки. Не беспокойтесь, вырезаете ли вы последний элемент или нет, все строки одинаковы. Что касается отображения undefined , этого легко избежать, если вы знаете, что в каждой строке есть только один элемент - и в тех случаях, когда массив находится в одной строке, например [1, 2, 3, 4, 5] вы не должны добавлять запятую в конце.

С другой стороны, я не думаю, что это имеет значение. Здесь важен переход на const / let .

... но теперь эта транспиляция происходит ...

Мы же не транспилируем? Rollup просто заменяет синтаксис импорта / экспорта ES6, оставляя все остальное в покое, если вы не добавляете плагины, такие как rollup-plugin-buble . Но let / const все равно поддерживаются в IE11.

Завершающие запятые также служат гораздо большей цели, чем просто «простота использования». В более крупных проектах, в которых участвует множество людей, полезно использовать такие вещи, как git blame чтобы узнать, кто за какой фрагмент кода отвечает.

Итак, констатируем очевидное: если есть вещи, перечисленные в нескольких строках, которые были добавлены @mrdoob , и я бы позже добавил туда строку, мое имя будет отображаться в последней строке кода, который я не писал.

Я лично против использования конечных запятых по той же причине, что и люди, заявленные до меня, но я действительно вижу преимущества, и я привыкаю к ​​этому сейчас, когда мы также применяем это в офисе с этого года.

В наши дни интерпретаторы JS удаляют эту запятую?

Ага.

Что касается использования let vs var :

Разница между let и var наши дни больше не имеет значения, если дело доходит до производительности. V8 и Spidermonkey (Firefox) в наши дни имеют отличную оптимизацию, которая действительно хорошо работает.

См. Этот пост для уточнения (не забудьте запустить фактические фрагменты, чтобы увидеть, что теперь разница в значительной степени незначительна): https://stackoverflow.com/questions/37792934/why-is-let-slower-than-var- в-для-петли-в-nodejs

Принятый ответ на этот SO-вопрос также указывает на различия между var и let с функциональной точки зрения, поскольку оба они имеют очень разные значения и варианты использования в случае, если это неясно. кому-либо.

Использование const для переменных, которые никогда не меняются, не составляет труда. Если механизм javascript видит, что переменная объявлена ​​с помощью const , он знает, что ее значение больше никогда не изменится, поэтому ее можно сильно оптимизировать.

Только мои 2 цента.

Для справки:

Завершающие запятые - один из лучших шаблонов js, которые я когда-либо видел, и они делают различия более разборчивыми.

В наши дни интерпретаторы JS удаляют эту запятую?

Все браузеры прекрасно справлялись с этой запятой в массивах и объектах в течение> 10 лет, кроме IE.

Позвольте мне добавить, а не смотреть на это как на странную вещь, еще одна точка зрения заключается в том, что синтаксис на самом деле является запятой, это просто браузер дает вам перерыв и не требует последнего. Странность одного человека - украшение другого. Я считаю, что последовательность каждой строки одинакова для меня более приятна, чем последняя строка, которая отличается. Конечно, это личные предпочтения, я просто предлагаю им по-другому взглянуть на вещи.

что касается различий, я нашел эти сравнения в Интернете

без завершающей запятой diff добавление строки

конечная запятая diff добавление строки

Начнем сначала с let и const . Шаг за шагом.

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

Я думаю, что это время слишком близко для звонка. Я получаю разные результаты

screen shot 2018-07-31 at 9 13 50

Хотя в Chrome 70 они отдаленно не близки

screen shot 2018-07-31 at 9 15 36

пока мы на этом

screen shot 2018-07-31 at 9 19 20

screen shot 2018-07-31 at 9 20 18

Позвольте мне добавить еще один POV для конечных запятых 😜 Вы можете видеть конечные запятые, похожие на точку с запятой

Это совершенно законный код

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

В последней строке отсутствует точка с запятой. Один POV - видеть запятую как одно и то же. Может это похоже на иллюзию людей / ламп.

Независимо от того, видите ли вы двух человек или лампу, оба варианта действительны. Но в этом случае, с запятой, поскольку обе точки зрения подходят («запятая на конце выглядит как неопределенная» против «пропущенная запятая выглядит непоследовательно») у одного есть объективные преимущества, а у другого нет ...?

Я попытался добавить где-нибудь в коде const и он больше не компилируется ...

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

@mrdoob Формат вывода должен быть установлен на ES6 вместо ES или ES5 .

Закрытие в пользу №6419.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги