どこにあるのか思い出せませんが、最近、JavaScriptではAllmanよりも1TBSの方が好ましいとユーザーが言って、AllmanはJavaScriptに危険な影響を与えるというコメントを渡しました。
それは有効な声明でしたか?もしそうなら、なぜですか?
どこにあるのか思い出せませんが、最近、JavaScriptではAllmanよりも1TBSの方が好ましいとユーザーが言って、AllmanはJavaScriptに危険な影響を与えるというコメントを渡しました。
それは有効な声明でしたか?もしそうなら、なぜですか?
return
それの後に持つことはできませんLineTerminator
:
return
{
};
(オブジェクトを返す)ではなくreturn;
(return )として扱われますundefined
return {};
詳細については、ルールを参照してくださいAutomatic Semicolon Insertion (ASI)
。
これは有効なステートメントです。
JavaScriptのエンジンには、必要に応じて行の戻りにセミコロンを挿入するASI(自動セミコロン挿入)と呼ばれるものがあるためです。「必要に応じて」はあいまいです。動作する場合と動作しない場合があります。ルールを参照してください。
だから、他の答えで言ったように:
return
{
};
// Is read by the JavaScript engine, after ASI, as:
return; // returns undefined
{ // so this is not even executed
};
したがって、return
ステートメントにはお勧めしません。
ただし、ガイドラインで関数宣言にAllmanスタイルが推奨されている場合は、まったく問題ありません。私はそうする人を知っています。
声明次第だと思います。たとえば、左中括弧が改行にある場合、returnステートメントが壊れている可能性があります。 詳細はこちら。
return {
a: "A",
b: "B"
};
// vs.
return // Semicolon automatically inserted here! Uh oh!
{
a: "A",
b: "B"
}
return
キーワードと。を含む1つの特殊なケースを覚えている限り、AllmanまたはAllman-8スタイルを問題なく使用できますthrow
。
return
オブジェクトリテラルをキーワードまたはラインフィードで分離するthrow
ことは、JavaScriptでは機能しません。これはASIルールに特別な例外throw
とreturn
ステートメントがあるためです。
- プログラムが左から右に解析されるときに、文法の一部の生成で許可されるトークンが検出されたが、生成は制限された生成であり、そのトークンは、注釈の直後の終端記号または非終端記号の最初のトークンになります。制限付きプロダクション内の「<strong>[ここにLineTerminatorはありません]」(したがって、このようなトークンは制限付きトークンと呼ばれます)、 制限付きトークンは少なくとも1つのLineTerminatorによって前のトークンから分離され、セミコロンが前に自動的に挿入されます制限されたトークン。
と
注以下は、文法で制限されている唯一
の生成です。 [...]
ReturnStatement:
return
[ここにLineTerminatorはありません] 式;
ThrowStatement:
throw
[ここにLineTerminatorはありません] 式;
(他にも制限されたプロダクションがありますが、それらは中括弧をサポートしていないため、Allmanスタイルにとって重要ではありません。)
実際には、これは期待どおりには機能しません。
return
{
status: "successful",
user:
{
id: "9abf38a3-c2f5-4159-a1be-0eccbc1b2349",
label: "John Doe",
},
};
として解釈されるため(リターン後のセミコロンに注意してください!)
return;
{
status: "successful",
user:
{
id: "9abf38a3-c2f5-4159-a1be-0eccbc1b2349",
label: "John Doe",
},
};
したがって、構文を使用する必要があります
const response =
{
status: "successful",
user:
{
id: "9abf38a3-c2f5-4159-a1be-0eccbc1b2349",
label: "John Doe",
},
};
return response;
また
return {
status: "successful",
user:
{
id: "9abf38a3-c2f5-4159-a1be-0eccbc1b2349",
label: "John Doe",
},
};
代わりは。
個人的には、返された構造に名前を付ける方が読みやすいと思うので、それを使用します。また、どこでもAllman-8を使用しています。これは、実際には、8つのスペース幅のタブ文字を使用し、1つ以上のスペースではなく1つのタブ文字ですべてをインデントすることを意味します。
理論的には、誰かが書くこともできます
throw
{
status: "error",
code: 12,
details: localvar,
};
throw
上記のASI規則により、キーワードの直後にセミコロンが挿入されるため、これも失敗します。現実の世界では、誰もが書いているようthrow new ...
ですthrow localvar
。
これらの例外の履歴はわかりませんが、この事故に依存する既存の実世界のコードのために、これ以上修正できない歴史的な事故であると推測できます。この自動セミコロンが実際に有益である構造は見当たらないので、これは歴史的な仕様の単なるバグだと思います。(次のコード、return
またはthrow
オブジェクトリテラルで合理的に開始できないため、挿入されたセミコロンでは機能しません。)