Three.js: スタイルガイドを再検討しますか?

作成日 2018年07月19日  ·  16コメント  ·  ソース: mrdoob/three.js

これはワームの缶を開けていると確信していますが、[スタイルガイド]は少し古くなっているようで、2つの変更を提案したいと思います

好むconstletvar

varが好まれる理由がわかりません(最近のPRでvarに変更するように言われました)。 私の推測では、それが始まりであり、 constletが新しいためです。 しかし、コードベースがES5モジュールを使用しているので、 varを維持する理由はほとんどなくなっているようです。 import行があるため、 varのみをサポートするブラウザーでコードを機能させるには、コードをトランスパイラーで実行する必要があります。 その同じトランスパイラーは、すでにconstletvar変換します。

さらに、 var constletを使用することには、具体的な客観的なプラス面があります。 どちらも、関数スコープではなく中括弧にスコープされています。 varとは異なり、グローバル変数も作成しません。 確かに、コードの多くは現在varます(ただし、IIRC eslintはそれを自動修正できます)。 constletを必要とするようにリンターを変更し、レガシーコードをゆっくりと変更すると、エラーやリークが増えるのを防ぐことができます。 また、 constletがどこでも使用されているので、eslintを有効にして、未定義の変数をチェックすることができます。これは、少なくとも私にとっては大きな助けになります。

varが速かった時期がありましたが、その時代は過ぎ去りました。

var使用をやめる時が

複数行の配列とオブジェクトで末尾のコンマを許可する

これはDoob氏の個人的な好みかもしれませんが、IEの時代から残っていると思います。 IEは末尾のコンマをサポートしていませんでしたが、トランスパイルが発生しているため、IEの互換性のために末尾のコンマはトランスパイラーによって削除されます。 開発者にとって、末尾のコンマはエラーが少なくなるため、メリットがあります。 通常はキャッチされますが、キャッチするために少なくとも1回の反復が必要なエラー。ブラウザで実行し、構文エラーを確認してから、戻ってコンマを編集します。 少なくとも私の経験では、末尾のコンマはその問題を回避します。

複数行の配列やオブジェクトの末尾にコンマがあるとは、たとえば

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

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

末尾のコンマを使用すると、行を追加または削除するために必要なのは1行だけです。 末尾にコンマがある場合は、最後のコンマがであることに常に注意し、それを削除または追加する必要があることを意味します。

もちろん、決められたものは何でも大丈夫です、私はPRのガイドに従います。 コードがES5モジュールに切り替わったときに、スタイルガイドの一部を再検討する時期が来たかどうかを尋ねると思いました( var部分は実際にはスタイルガイドに含まれていないことに注意してください)。

Suggestion

最も参考になるコメント

JS通訳者は最近そのコンマを削除しますか?

IEを除いて、すべてのブラウザは10年以上、配列とオブジェクトのコンマで問題ありませんでした。

別のPOVとして奇妙なこととして見るのではなく、構文は実際にはコンマが必要であり、ブラウザーが休憩を与えるだけで、最後のコンマは必要ないということを付け加えておきます。 ある人の奇妙なのは別の人の美化です。 すべての行の一貫性は、最後の行が異なるよりも個人的に同じであることがわかります。 もちろん、それらは個人的な好みであり、私は物事を見る別の方法を提示しているだけです。

差分については、これらの比較をオンラインで見つけました

行を追加する末尾のコンマ差分はありません

行を追加する末尾のコンマ差分

全てのコメント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行に1つのアイテムしかないことがわかっている場合、および配列が[1, 2, 3, 4, 5]ように1行にある場合は、末尾にコンマを追加しないことを簡単に回避できます。

一方で、どちらにしても問題ないと思います。 const / letへの切り替えは、ここでの重要な問題です。

...しかし今、トランスパイルが起こっています...

私たちはトランスパイルしていませんよね? rollup-plugin-bubleのようなプラグインを追加しない限り、ロールアップはES6のインポート/エクスポート構文を置き換えるだけで、他のすべてはそのままにします。 ただし、IE11ではlet / constがサポートされています。

末尾のコンマは、単なる「使いやすさ」よりもはるかに大きな目的を果たします。 多くの人が貢献している大規模なプロジェクトでは、 git blameようなものを使用して、誰がどのコードの責任者であるかを調べると便利です。

したがって、ここで明白なことを述べてください: @mrdoobによって追加された複数の行にリストされているものがあり、後でそこに行を追加すると、私の名前は私が書かなかったコードの最後の行に表示されます。

個人的には、前に述べたのとまったく同じ理由で末尾のカンマを使用することに反対していますが、今年からオフィスでもこれを実施しているので、メリットがあり、慣れてきました。

JS通訳者は最近そのコンマを削除しますか?

うん。

letvarの使用について:

letvarの違いは、パフォーマンスに関して言えば、最近は問題ではなくなりました。 V8とSpidermonkey(Firefox)には、最近非常にうまく機能する優れた最適化があります。

詳細については、この投稿を参照してください(実際のスニペットを実行して、違いがほとんど無視できることを確認してください): https

そのSO質問の受け入れられた回答は、機能的な観点からのvarletの違いも指摘しています。どちらも、明確でない場合に備えて、非常に異なる意味とユースケースを持っているからです。誰にも。

決して変更されない変数にconstを使用するのは簡単です。 javascriptエンジンは、変数がconstで宣言されていることを確認できれば、その値が二度と変更されないことを認識しているため、大幅に最適化できます。

ちょうど私の2セント。

参考のために:

末尾のコンマは、私が見た中で最高のjsパターンの1つであり、差分をはるかに読みやすくします。

JS通訳者は最近そのコンマを削除しますか?

IEを除いて、すべてのブラウザは10年以上、配列とオブジェクトのコンマで問題ありませんでした。

別のPOVとして奇妙なこととして見るのではなく、構文は実際にはコンマが必要であり、ブラウザーが休憩を与えるだけで、最後のコンマは必要ないということを付け加えておきます。 ある人の奇妙なのは別の人の美化です。 すべての行の一貫性は、最後の行が異なるよりも個人的に同じであることがわかります。 もちろん、それらは個人的な好みであり、私は物事を見る別の方法を提示しているだけです。

差分については、これらの比較をオンラインで見つけました

行を追加する末尾のコンマ差分はありません

行を追加する末尾のコンマ差分

最初にletconstから始めましょう。 一歩ずつ。

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

末尾のカンマにもう1つPOVを追加しましょう😜末尾のカンマはセミコロンに似ています。

これは完全に合法的なコードです

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

セミコロンがない最後の行。 1つのPOVは、コンマを同じものと見なすことです。 多分それは人々/ランプの幻想のようなものです。

あなたが2人またはランプスティックを見るかどうかは両方とも有効です。 しかし、その場合、両方のPOVが適合するため、コンマを使用すると(「コンマが定義されていないように見える」と「コンマが欠落しているように見える」)、一方には客観的な利点があり、もう一方にはそうではありません...?

コードのどこかにconst追加しようとしましたが、コンパイルされなくなりました...

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

@mrdoob出力形式は、 ESまたはES5ではなくES6に設定する必要があります。

#6419を支持して閉会。

このページは役に立ちましたか?
0 / 5 - 0 評価