web-dev-qa-db-ja.com

JavaScriptが改行で中括弧かどうか?

職場では次の行に中かっこを配置しますが、自宅ではその逆を行います。あなたはどちらを好みますか? (K&R vs OTBS)

function something() {
    // ...
}

function something()
{
    // ...
}

多くのJavaScriptライブラリはOTBS(真のブレーススタイル)を使用しているようです。他のJavaScriptプロジェクトとの一貫性を保つためにそれらをフォローしたいのですが、K&Rスタイルはもっと読みやすく見えませんか?

注:JavaScriptのreturnと中括弧の問題はわかっています。これは常に例外です。ただし、これは1つのケースにすぎません。

48
Tower

これは、使用可能な答えを決して得られない聖戦です!プロジェクトの他の全員が使用しているものに固執し、主張しないでください。

それが価値があるもののために、私はK&Riteです。 OTBSは、最初の構造と次のステートメントの間に多くの視覚的なスペースを配置していることがわかります。これらの2つの行はしばしば強く関連しているため、ほとんど空白の行を介在させずにまとめて表示するほうがよいでしょう。関連するステートメントのブロックを区切るために空行を予約しておくのが好きです。

とにかく多くの空白があるコーディングスタイルでは、これは比較的重要ではない場合があります。しかし、個人的には私は簡潔さを大切にしているので、プログラムの多くを画面上に保つことができます。

右中かっことは別の列に左中かっこがあることが問題になるとは思いません。インデントからブロックの形状を確認するのは簡単です。ぶら下げインデントを使用している場合を除きます。それをしないでください。しかし、それは完全に別の聖戦です。

31
bobince

Douglas Crockford K&Rスタイルを選択する理由を示します1

私は常にK&Rスタイルを使用し、{これは、JavaScriptのreturnステートメントでのひどい設計ミスを回避するためです。

彼が言及している失敗は、JavaScriptがreturnステートメントを次の2つのシナリオで異なる方法で処理する方法です。

return {
   'status': 'ok'
};

...そして:

return 
{
   'status': 'ok'
};

最初のものはstatusプロパティを持つオブジェクトを返しますが、後者は セミコロン挿入 のためにundefinedを返します。


1 Douglas Crockford:JavaScript:The Good Parts:Style(page 96)-ISBN:978-0596517748。

147
Daniel Vassallo

私は、SunのJavaスタイルガイドラインに触発された、Douglas CrockfordのJavaScriptコーディング規約に従います。

これへのリンクは次のとおりです。 http://javascript.crockford.com/code.html

18
dalton

私の意見では、それは他の誰があなたのコードで作業するかによります。 C#チームで作業し、多くの責任を共有する場合は、それを新しい行に配置し、他の方法では続く必然的な口論を避けます。たくさんのPHP(または古いJSプログラマー)と作業する場合は、まったく同じ理由で最初の行にそれを入れてください。

しかし、より信頼できるものを探している場合、Douglas Crockfordは、開始中括弧は 常に先頭行にある である必要があると述べています。彼の推論は、もし私が正しく覚えていれば、それが言語の残りの部分と一致するようになるということです。基本的に、これは有効ですが(おそらく)正しくないコードなので、

function myFunc() 
{
    return 
    {
      ok: true
    };
} 

...新しい行に開き中かっこを付けることは一般的に避けてください。どうして?なぜなら、プログラミングスタイルはすべきではないため、構文が曖昧になるからです。

上記のサンプルコードは、構文的に完全に正しいため、これを記述しても例外は発生しないため、有効です。ただし、オブジェクトリテラルを返す代わりに、{ok:true}、それはundefinedを返し、その下のコードには到達しません。左中括弧を1行上に置くと、期待どおりのオブジェクトリテラルが返されます。

問題は、その議論は十分説得力があると思いますか?

13
Andrew

どちらも他より優れていません。 1つを選択し、それを一貫して使用してください。

5
Behrang

すべて主観的。一部は少し良いですが、違いはごくわずかです。 最も重要なことは、すべてのコードで一貫性を保つことです。

個人的には、4つのスペースの「本物の」タブを備えた、隠れたスタイルを好みます。

function a() {
 if(b){
 do; 
} else {
 do2; 
} 
}
4
Delan Azabani

私はそれらを同じ行に置くことを好みますが、主に匿名関数を引数として渡すためです...それにより、スペースが節約され、関数定義が不快に見えなくなります。もちろん、これは単なる意見であり、一貫性が最も重要であることはバイトコード忍者に同意します。

3
Faisal

上記と同じ理由で、K&R方式を好みます。見た目はコンパクトになり、関連する2つの行がグループ化されています。

0
computersaurus

多くの回答で述べられているように、自分(または該当する場合はチームメイト)が固執するスタイルを見つけることが最も重要です。個人的に私は同じ行を好みます。新しい行に中括弧を置くと、クロージャーとネストされた関数で作業している場合、多くの空白行になり、コードが読みにくくなります(ただし、おそらくほとんどの人...)

0
Jake