12

最近まで気がつかなかったのですが、JavaScriptコードを書くときはオールマンスタイルを使っています。

http://encosia.com/in-javascript-curly-brace-placement-matters-an-example/によると、 K&R スタイルを使用する必要があります。これは、状況によっては、次の行に中括弧を配置すると問題が発生する可能性があるためです。私にとっての問題は、私がオールマンのスタイルがかなり好きになり、むしろ変更したくないということです.

だから、私の質問

  • javascript の中括弧の配置が原因で allman スタイルがエラーを引き起こす可能性があるというのは本当ですか? jqueryはどうですか?

  • 中括弧が原因で問題なく Allman スタイルを使用できるようにするトリックはありますか?

  • これらのスタイルの使用に関連する他の問題はありますか?

4

2 に答える 2

8

javascript の中括弧の配置が原因で allman スタイルがエラーを引き起こす可能性があるというのは本当ですか?

はい、そうです。リンクが説明しているreturnように、改行が続くステートメントは、セミコロンを挿入しようとするときにパーサーを混乱させます。ただし、この動作はオブジェクト リテラルを返すことに限定されません。次の関数:

function foo()
{
    return
        "bar";
}

また、戻りundefinedます。

jqueryはどうですか?

jQuery が含まれているかどうかに関係なく、状況はまったく同じです。

中かっこのために問題なく Allman スタイルを使用できるようにするトリックはありますか?

はい、オブジェクト リテラルで Allman スタイルを使用しないでください。オブジェクトリテラルを変数に割り当てたいと考えてください。あなたは本当に書くつもりですか:

var foo =
{
    bar: "quux"
};

または、あなたは行き​​ますか:

var foo = {
    bar: "quux"
};

私見では、2 番目のスニペットは最初のスニペットよりも読みやすくなっています。forifwhile、などの中括弧を使用してオールマン スタイルを使用し続けることができますがfunction、オブジェクト リテラルは例外とします。

これらのスタイルの使用に関連する他の問題はありますか?

return引数の有無にかかわらず有効であるため、非常に特殊なケースです。1 行に 1 つのステートメントがある場合return、パーサーは、セミコロンを追加して 1 行のステートメントを有効にするか、次の行に進んで最善を尽くすかを判断できません。

returnこのため、この動作はand mightthrowでのみ問題になり、他のステートメントでは問題にならないと思います。

于 2012-09-02T07:24:56.727 に答える
2

自動セミコロン挿入に関するECMAScript仕様に注意してください。

特定のECMAScriptステートメント(空のステートメント、変数ステートメント、式ステートメント、do-whileステートメント、continueステートメント、break ステートメント、returnステートメント、およびthrowステートメント)は、セミコロンで終了する必要があります。このようなセミコロンは、常にソーステキストに明示的に表示される場合があります。ただし、便宜上、特定の状況では、このようなセミコロンをソーステキストから省略できます。これらの状況は、セミコロンがこれらの状況でソースコードトークンストリームに自動的に挿入されると言うことで説明されます。

私はそれが「便利」であるという上記の提案を笑います...

上記で説明されていない場合でも、技術的にはAllmanフォーマットを引き続き使用できますが、一貫性を説きます。個人的に私はGoogleJSスタイルガイドのファンです-あなたの質問に関連するセクションはコードフォーマットセミコロンのものです。そこにリストされている例はチェックする価値があります。

于 2012-09-02T08:25:03.720 に答える