序文:
プログラミング言語のコーディングスタイルは、特にチームワークにおいて、長期的なメンテナンスソフトウェアにとって非常に重要です。チームが統一された標準化されたコーディングスタイルを使用している場合、チームのコラボレーションレベルと作業効率を改善できます。プログラミングスタイルガイドの中心にあるのは、高レベルのコードの記述方法を決定する基本的なフォーマットルールです。このガイドは、「Java言語コーディング仕様」とCrockfordのJavaScriptプログラミングの仕様、およびNicborasの個人的な経験と好みの一部に基づいた本「Writing Maintable JavaScript」に基づいています。この記事を書く目的は、あなたの印象を深め、より多くの人々にJSコーディングスタイルを理解し、コーディングの品質を向上させることです。詳細については、「メンテナブルJavaScriptの書き込み」をお読みください。
1。インデント
各行のレベルは4つのスペースで構成されており、タブを使用してインデントを回避します。
//良い執筆方法if(true){dosomething();}2.行の長さ
各行は、長さ80文字を超えてはなりません。ラインが80文字を超える場合、オペレーターの後に壊れるはずです。次の行は、2つのレベルのインデント(8文字)を追加する必要があります。
//良い書き込み方法dosomething(argument1、argument2、aegment3、argument4、argument5); //悪い書き込み方法:インデントされたdosomething(argument1、argument2、aegment3、argument4、argument5);
3。元の値
文字列は常に二重引用符を使用して1つの行を保持する必要があります。スラッシュを使用して文字列内の1行を起動することを避けてください。
数字は小桁整数を使用する必要があり、科学的アルゴリズムは整数、六肢整数、または小数点以下の小数点を表します。小数の前後に少なくとも1つの数値を保持する必要があります。オクタルの直接的な量の使用は避けてください。
以下の場合を除き、特別な値nullは避ける必要があります。
•変数を初期化するために使用されます。変数は、オブジェクトに値を割り当てることができます。
•オブジェクトであるか、そうでない場合がある、またはそうではない初期化された変数と比較するために使用されます。
•関数のパラメーターがオブジェクトになると予想される場合、パラメーターとして渡されます。
•関数の返品値がオブジェクトになると予想される場合、返品値として渡されます。
未定義の特別な値の使用は避けてください。変数が定義されているかどうかを判断するには、TypeOF演算子を使用する必要があります。
4。オペレーター間隔
表現をきれいに保つために、バイナリ予算の前後にスペースを使用する必要があります。オペレーターには、割り当てオペレーターと論理演算子が含まれます。
//(var i = 0; i <count; i ++){process(i);} //悪い書き込み:(var i = 0; i <count; i ++){process(i);}5。ブラケット間隔
ブラケットを使用する場合、左ブラケットの直後とクローズブラケットの直前にスペースがないはずです。
//(var i = 0; i <count; i ++){process(i);} //悪い書き込み:悪い書き込み:(var i = 0; i <count; i ++){process(i);}のパラメーターの両側に余分なスペースがあります。6。直接オブジェクト測定
オブジェクトの直接数量には、次の形式が必要です。
•開始左ブレースは、式と同じ線に保持する必要があります。
•各属性の名前値はインデントされたままにする必要があり、最初の属性は左カーリーブレースの後の新しい行である必要があります。
•各属性の名前値は、引用符なしで使用する必要があります。その後、コロン(スペースの前)が続き、その後に値が続きます。
•属性値が関数タイプの場合、関数本文は属性名の下に新しい行を起動し、その前後に空白行を保持する必要があります。
•ブランクラインは、コードの読みやすさを改善するために、関連するプロパティのセットの前後に挿入できます。
•エンディング右ブレースは、1つのラインのみを占める必要があります。
//グッドライティングメソッドvar object = {key1:value1、key2:value2、func:function(){// dosomething}、key3:value3}; //悪い書き込み方法:不適切なインデントvarオブジェクト= {key1:key2:value2}; // dosomething}、key3:value3};オブジェクトリテラルが関数パラメーターとして使用される場合、値が変数の場合、開始ブレースは関数名と同じ行にある必要があります。以前にリストされていた他のすべてのルールも適用されます。
//グッドライティング方法dosomething({key1:value1、key2:value2}); //悪い書き込み方法:すべてのコード({key1:value1、key2:value2});7。コメント
簡潔で明確なコメントを使用すると、他の人があなたのコードを理解するのに役立ちます。次の状況でコメントを使用する必要があります。
•コードはあいまいです。
•エラーと間違えられる可能性のあるコード。
•必要ですが、明らかではないブラウザ固有のコード。
•オブジェクト、メソッド、またはプロパティについては、ドキュメントを生成する必要があります(適切なドキュメントコメントを使用)。
シングルラインのコメント
シングルラインのコメントを使用して、コードの1行または関連コードのセットを説明する必要があります。シングルラインのコメントを使用するには、3つの方法がある場合があります。
•次のコード行を説明するための排他的なコメント。
•コードの終わりにコメントをコメントして、コードの前に説明します。
•コードブロックをコメントするための複数の行。
//(条件)if(条件){//コードがここで実行されている場合、すべてのセキュリティチェックが渡されたことを意味します;} //悪い書き込み:コメントの前に空白行はありません(条件){//コードがここで実行されている場合、すべてのセキュリティチェックが渡された場合、すべてのセキュリティチェックが渡されたことを意味します;渡された;} //悪い書き込み:マルチラインのコメントを使用する必要がある// 許可された(); // ** functionを実行} //貧弱な書き込み:コードとコメントの間に十分なスペースがありません(条件){//コードがここで実行されている場合、すべてのセキュリティチェックが許可されていることを意味します(); // ** functionを実行} //適切な書き込み:コードブロックにコメントするときは、単一の行のコメントを使用するために連絡する必要があります。この場合はマルチラインのコメントを使用しないでください。 // if(condition){// approad(); // execute ** function //}マルチラインコメント
コードがより多くのテキストを解釈する必要があるときに、マルチラインのコメントを使用する必要があります。各マルチラインコメントには、次のように少なくとも3行の行があります。
1.最初の行には /*コメント開始のみが含まれます。この行に他のテキストはないはずです。
2。次の行は *で始まり、左整列のままです。これらは言葉で説明できます。
3.最後の行は */で始まり、前の行と整列したままです。他のテキストはないはずです。
マルチラインコメントの最初の行は、コードを説明するのと同じレベルのインデントを維持する必要があります。後続の各ラインには、同じレベルのインデントと接続されたスペースが必要です( *文字を適切に整列させるため)。空白の行は、各マルチラインコードの前に予約する必要があります。
//良い書き込み方法、if(condition){/**ここでコードが実行されている場合*すべてのセキュリティ検出が渡されたことを意味します*/許可();}コメントステートメント
コメントを使用して、追加情報をコードに宣言することができます。これらのステートメントの形式は一言で始まり、すぐにコロンが続きます。使用できるステートメントは次のとおりです。
TODO:説明コードはまだ完了していません。次にやりたいことを含める必要があります。
ハック:コードの実装がショートカットを取得したことを示しています。ハッキングが使用される理由を含める必要があります。これはまた、問題に対するより良い解決策があるかもしれないことを示しているかもしれません。
XXX:コードに問題があり、できるだけ早く修正する必要があることを説明してください。
FIXME:コードに問題があり、できるだけ早く修正する必要があることを説明してください。 XXXにわずかに秒です。
レビュー:可能な変更において、指導コードをレビューする必要があります。
これらの宣言は、1つ以上のコメントで使用される場合があり、一般的なコメントタイプと同じフォーマットルールに従う必要があります。
8。ネーミング
変数と関数は、名前を付けるときは注意する必要があります。命名は数値のアルファベット文字に限定され、場合によってはアンダースコア(_)を使用できます。命名にはドル記号($)またはbackslash(/)を使用しないことが最善です。
可変命名は、最初の文字小文字と各単語の大文字の最初の文字を使用して、ラクダの命名形式である必要があります。変数名の最初の単語は、同じ関数との混乱を避けるための名詞(動詞ではない)でなければなりません。可変名でアンダースコアを使用しないでください。
//グッドライティングメソッドvar councountnumber = "test001"; //執筆方法:大文字で開始var accountnumber = "test001"; //悪い書き込み方法:動詞var getAccountNumber = "test001"; //悪い書き込み方法:Use Enderscore var Account_number = "test001";
関数名もラクダの命名形式である必要があります。関数名の最初の単語は、同じ変数との混乱を避けるための動詞(名詞ではない)でなければなりません。関数名でアンダースコアを使用しないことが最善です。
//良い書き込み方法関数dosomething(){// code} //悪い書き込み方法:function dosomething(){// code} //悪い書き込み方法:function何か(){// code} //悪い書き込み方法コンストラクター - 新しいオペレーターを介して新しいオブジェクトを作成する関数は、Camel形式でも名前が付けられ、最初の文字が大文字である必要があります。新しいものはオブジェクトのインスタンスを作成する操作を表すため、コンストラクター名は非verbで開始する必要があります。
//グッドライティングメソッドfunction myobject(){// code} //悪い書き込み方法:function myobject()小文字の冒頭{// code} //悪い書き込み方法:アンダースコア関数my_object(){// code} //悪い書き込み方法:verb getmyobject(){// code} {// code}定数(値が変更されない変数)の名前はすべて大文字である必要があり、異なる単語間の単一のアンダースコアで区切られています。
//グッドライティングメソッドvar total_count = 10; //悪い書き込み方法:ラクメルフォームvar totalcount = 10; //悪い書き込み方法:ミックスフォームvar total_count = 10;
オブジェクトの属性は、変数の属性と同じです。オブジェクトの方法は、機能の方法と同じです。プロパティまたは方法がプライベートである場合、その前にアンダースコアを追加する必要があります。
//グッドライティングメソッドvar object = {_count:10,4 _getcount:function(){return this._count; }}9。変数および関数宣言
変数宣言
すべての変数は、使用する前に事前に定義する必要があります。変数定義は、行ごとにVAR式1変数を使用して、関数の先頭に配置する必要があります。最初の行を除き、すべての行を1つのレイヤーにインデントする必要があり、変数名を垂直に整列させることができます。可変定義は初期化され、割り当てオペレーターは一貫したインデントを維持する必要があります。初期化された変数は、変数が初期化される前に行う必要があります。
//グッドライティング方法var count = 10、name = "jeri"、fund = false、empty;
関数宣言
機能は、使用する前に事前に定義する必要があります。メソッドではない関数(つまり、オブジェクトとしての属性はありません)は、関数によって定義された形式(関数式と関数コンストラクター形式ではありません)を使用する必要があります。関数名と開始括弧の間にスペースがないはずです。エンディングブラケットと右側の巻き毛ブラケットの間にスペースを残す必要があります。右側のカーリーブレースは、関数キーワードと同じ行に留まる必要があります。開始ブラケットとエンドブラケットの間にスペースがないはずです。パラメーター名の間のコンマの後にスペースを残す必要があります。関数本体は、最初のレベルではインデントのままでなければなりません。
//グッドライティングメソッド関数outer(){var count = 10、name = "jeri"、fund = false、empty; function inenter(){// code} // inner()}を呼び出すコード匿名関数は、オブジェクトへのメソッド、または他の関数へのパラメーターとして割り当てられる場合があります。関数キーワードと開始ブラケットの間にスペースがないはずです。
//グッドライティングメソッドObject.method = function(){// code}; //悪い書き込み方法:spect space object.method = function(){// code};すぐに呼び出される関数は、関数呼び出しの外層にある庭の括弧に巻き付けられる必要があります。
// good method var value =(function(){// function body return {message: "hi"}}());厳密なモード
厳格モードは関数内でのみ使用する必要があり、グローバルに使用しないでください。
//悪い書き込み方法:Strictモード「Strictを使用」を使用します。 function dosomething(){// code} //良い書き込み方法関数dosomething(){"sprict"; //コード}10。オペレーター
割り当て
変数に値を割り当てる場合、右側が比較ステートメントを含む式である場合、括弧内に包む必要があります。
//グッドライティングvar flag =(i <count); // bad writing:欠落している括弧var flag = i <count;
等号演算子
===(等しい)と!=(等しい)の代わりに===(厳密に等しい)および!==(厳密に不平等)(不均等)が弱いタイプ変換エラーを避けます。
//グッドライティングvar same =(a === b); //グッドライティングvar same =(a == b);
トリプルオペレーター
三元演算子は、条件付き割り当てステートメントでのみ使用する必要があり、IFステートメントの代替として使用しないでください。
//良い書き込み方法var値=条件? value1:value2; //悪い書き込み方法:式を使用する必要がある場合、割り当てなし? dosomething():dosomethingelse;
11。ステートメント
簡単な声明
各行には、せいぜい1つのステートメントのみが含まれています。すべての簡単なステートメントは、セミコロン(;)で終了する必要があります。
//グッドライティング方法++; a = b a = b;
returnステートメント
場合によっては、返品値を理解しやすくする場合がある場合を除き、値を返すときは、括弧に包まれてはいけません。例えば:
return; return collection.size(); return(size> 0?size:defaultsize);
複合ステートメント
複合ステートメントは、ブレースに囲まれたステートメントのリストです。
•囲まれたステートメントは、複合ステートメントよりも1つのレベルをインデントする必要があります。
•最初のブレースは、複合ステートメントが配置されている行の終わりにある必要があります。エンドブレースは1つのラインを占有し、複合ステートメントの開始と同じようにインデントのままである必要があります。
•ステートメントがステートメントなどの制御構造の一部である場合、すべてのステートメントは、単一のステートメントを含むブレースに同封する必要があります。この条約により、ブラケットを追加してバグを引き起こすことを忘れずに声明を追加しやすくなります。
•IFが開始されるようなステートメントのキーワード、その後にスペースが続き、開始ブレースの後にスペースが続く必要があります。
IFステートメント
IFステートメントは次の形式である必要があります。
if(条件){ステートメント} if(条件){ステートメント} else {ステートメント} if(条件){ステートメント} else if(条件){statements} else {statements}IFステートメントの巻き毛の装具を省略することは決して許されません。
//良いライティングif(condition){dosomething();} //悪い書き込み:不適切なスペース(条件){dosomething();} //悪い書き込み:すべてのコードは1行if(condition){dosomething(); } //悪い書き込み:すべてのコードは1行上にあり、(条件)dosomething();声明のために
タイプステートメントの場合は、次の形式である必要があります。
for(初期化;条件;更新){ステートメント} for(オブジェクトの変数){ステートメント}ステートメントの初期化部分には、変数宣言がないはずです。
//良い方法var i、len; for(i = 0、len = 0; i <len; i ++){// code} //悪い書き込み:(var i = 0、len = 0; i <len; i ++){// code} // bad writing:declare variable for(bar prop){// code}forin statementを使用する場合は、hasownproperty()を使用してダブルチェックしてオブジェクトのメンバーをフィルタリングすることを忘れないでください。
声明がある間
whileクラスの声明は、次の形式である必要があります。
while(条件){ステートメント}ステートメントを行います
DOクラスのステートメントは、次の形式である必要があります。
{ステートメント} while(条件);スイッチステートメント
スイッチクラスのステートメントは、次の形式である必要があります。
switch(expression){ケース式:ステートメントデフォルト:ステートメント}スイッチの下の最初のケースは、インデントされたままにする必要があります。デフォルトを含む最初のケースを除くすべてのケースは、その前に空白行を保持する必要があります。
各ステートメントのセット(デフォルトを除く)は、休憩、戻り、投げ、または一連のコメントで終了する必要があります。
//グッドライティングメソッドスイッチ(値){ケース1:/ *は */ケース2:dosomething();壊す;ケース3:trueを返します。デフォルト:新しいエラー( "Some error");}スイッチステートメントにデフォルトのケースが含まれていない場合、コメントの行を置き換える必要があります。
//グッドライティングメソッドスイッチ(値){ケース1:/ *は */ケース2:dosomething();壊す;ケース3:trueを返します。デフォルト://デフォルトなし}ステートメントをお試しください
Tryクラスのステートメントは、次のようにフォーマットする必要があります。
try {ステートメント} catch(variable){statements} try {ステートメント} catch(variable){statements}最後に{ステートメント}12。白を残します
ロジック関連のコード間に空のコード行を追加すると、コードの可読性が向上する可能性があります。
次の状況では、2つの空の行が使用されます。
•異なるソースコードファイル間。
•クラスとインターフェイスの定義の間。
シングルラインの空白線は、次の場合にのみ利用できます。
•メソッド間。
•メソッドのローカル変数と最初の行ステートメントの間。
•複数または単一行のコメントの前。
•メソッドの論理コードブロックを使用して、コードの可読性を改善します。
次の状況では、スペースを使用する必要があります。
•キーワードの後にブラケットが続く場合は、スペースで分離する必要があります。
•パラメーターリストのコンマの後にスペースを残す必要があります。
•ポイント(。)を除くすべてのバイナリ演算子のオペランドは、スペースで分離する必要があります。モノロジー演算子の手術は、単位マイナスの兆候、増分(++)、Dectrent( - )などのブランクによって分離されるべきではありません。
•声明の表現は、スペースで区切る必要があります。
13。避ける必要があるもの
•文字列などの元のラッパータイプを使用して新しいオブジェクトを作成しないでください。
•eval()を使用しないでください。
•ステートメントで使用しないでください。このステートメントは、厳密なモードでは存在しなくなり、将来のECMAScript基準でも削除される場合があります。
最後に書かれています
上記のガイドは、開発プロセス中に完全に守られていません。コードスタイルを改善し、コードを読みやすく保守可能にするために、それらの一部を描画することしかできません。コーディングスタイルに関しては、各チームには独自の特性があります。チームが一貫している限り、効率的に開発しても構いません。いくつかのルールは、私たちが絶え間なく従わなければならないものではありません。たとえば、インデンテーションの観点から、TABキーをより便利に使用することがよくありますが、TABがあらゆる環境の4つのスペースを表すことを保証することはできません。インデンテーションの一貫性を維持するために、TABキーを使用する場合、プロセス全体で使用する必要があります。また、一貫したスタイルを維持する限り、「」と「」を使用する必要もありません。また、個人の選択に基づいて、他にも多くの同様のスタイルの問題があります。
絶対的なルールはありませんが、適切であるかどうかだけです。