JavaScriptの命名規則[終了]


257

どの命名規則がJavaScriptに最適かについては、多くの論争(論争ではないかもしれませんが、少なくとも議論)があることを知っています。

変数、関数、オブジェクトなどにどのように名前を付けますか?

私はJSを長い間(数年のみ)行っていないので、私はこれについて自分の考えを残します。そして、作業中のプロジェクトで使用される命名規則を使用してドキュメントを作成するように要求されました。だから私は周りを(google-ing)見ていて、非常に多くの異なる意見があります。

私がJSで読んだ本も、それ自体が異なる命名規則を使用していますが、それらはすべて「1か所であなたに合ったものを見つけて、それに固執する」という点で一致しています。しかし、私はこれまで多くのことを読んだので、他の方法のいくつかが、今までに慣れている方法よりも少し好きであることがわかりました。


JSの常識的な命名規則の最新ガイド:robinwieruch.de/javascript-naming-conventions
Robin Wieruch

回答:


202

私は、ダグラス・クロックフォードの JavaScript のコード規約に従います。また、彼のJSLintツールを使用して、これらの規則に従って検証しています。


30
JSLintは、多くの開発者にとっては過激で制限的なものになる可能性があるので、JSHintの方が適切な選択です。
Pavel Hodek、2012年

7
Crockfordはこの詳細レベルには触れませんが、大文字で始まる変数は頭字語を指しているため、最初の文字または頭字語全体を小文字にする必要がありますか?例:ECBhandleecbHandle(ECBの意味関係ありませ)。
Dan Dascalescu 2013

13
良いリンクですが、「リンク回答」の投票数が多いとは思えません。リンクされたページの関連部分を少なくとも抽出してフォーマットすることができます。
エイドリアンBe

2
私は彼がリンクをうまくやっていると思います。気になる場合は、投稿を編集してください。
nckbrz 14

4
私は本当にCrockfordを尊敬していますが、彼のコード規約は非常に古くなっているようです。私は@PavelHodekの回答をリストのさらに下の方で見てアドバイスをします
PerHornshøj-Schierbeck2015

160

ジェフが言うように、クロックフォードが言うことは良いことです。

私が従う(そして広く使用されているのを見た)唯一の例外は、$ varnameを使用してjQuery(またはその他のライブラリ)オブジェクトを示すことです。例えば

var footer = document.getElementById('footer');

var $footer = $('#footer');


7
これにも$を使用します。オブジェクトのキャッシュされたコピーを示すために$を使用するのをよく見ます。いつも言葉遊びだと思っていました。キャッシュ>「現金」> $
Shawn Whinnery

1
AngularJSを使用している場合、これは最適なアイデアではない可能性があります-コアサービスの先頭には「$」が付きます
Filip Sobczak

2
変数名に特殊文字を使用しないことを強くお勧めします。特に多くのフレームワークは$を使用します。
nckbrz 14

1
@nixxbb変数のスコープを適切に設定すれば問題ありません。適切なフレームワークでも同様です。
Andre Figueiredo 2015年

1
Crockfordのガイドラインでは、「名前の最初または最後の文字として_アンダーバーを使用しないでください。プライバシーを示すことを意図している場合があります」と述べています。私は個人メンバーを示すために個人的にアンダーバーを使用しています。これは悪い習慣ですか?代わりはありますか?
Ian G

112

このGoogle JavaScriptスタイルガイドに従うことができます

通常は、functionNamesLikeThis、variableNamesLikeThis、ClassNamesLikeThis、EnumNamesLikeThis、methodNamesLikeThis、SYMBOLIC_CONSTANTS_LIKE_THISを使用します。

編集:JavaScriptスタイルガイドとビューティファイアーの素敵なコレクションをご覧ください。


15
彼らがDartとGWTを開発したことを考えると、私がそれに完全に同意するかどうかはわかりません(Chrome拡張機能のJavaScript APIも非常にJavaに似ています)。Googleの一部のチームにとって、JavaScriptを開発する最良の方法は、他の言語でJavaScriptを記述することです。
バダンク2012

2
私はいつも、Googleのプライベート命名規則を発見した奇妙な代わりに、_fooBar彼らはfooBar_-マイクロソフトは、右のそれを得た:asp.net/ajaxlibrary/act_contribute_codingStandards.ashx
ダニエルSokolowski

3
@DanielSokolowskiインテリセンスを使用する場合はどうですか?多数の変数の前にアンダースコアを付けると、それらの変数にアクセスするたびに入力する必要があるもう1つの文字になります。これが最後に来ると、インテリセンスのリストがすっきりし、必要なものを見つけるのが少し早くなります。
FreeAsInBeer 14

@FreeAsInBeer余分な文字については真実ですが、それより速くなるとは思いません。_プライベート変数を参照するときにタイプすると、結果がすぐにインテリセンスになります。結局それは個人的な好みだと思った。
Daniel Sokolowski、2014

1
スタイルガイドのリストにリンクしていただきありがとうございます。独占的にフォローする価値があるのか​​、それともどのように決定するのか、または統合を使用する必要があるかどうかはわかりません。しかし、複数の場所を1か所に見つける場所を知ることは、本当に役に立ちます。
Roger_S、2014

9

私が試してみたい規則の1つは、静的モジュールに 'the'プレフィックスを付けて命名することです。これをチェックしてください。誰か他の人のモジュールを使用するとき、私がそれをどのように使用することになっているのかを確認するのは簡単ではありません。例えば:

define(['Lightbox'],function(Lightbox) {
  var myLightbox = new Lightbox() // not sure whether this is a constructor (non-static) or not
  myLightbox.show('hello')
})

静的モジュールが「the」を使用してそれらの存在を示す規則を試すことを考えています。誰もこれより良い方法を見ましたか?次のようになります:

define(['theLightbox'],function(theLightbox) {
  theLightbox.show('hello') // since I recognize the 'the' convention, I know it's static
})

6

いくつかの構文制限に加えて、私はそれを考えています。命名規則の推論は、言語に大きく依存しません。つまり、c_style_functionsとJavaLikeCamelCaseを支持する引数は、反対に同じように使用できます。それは、言語ユーザーが言語の作者に従う傾向があるということだけです。

そうは言っても、ほとんどのライブラリは、JavaのCamelCaseの単純化にほぼ従う傾向があると思います。ダグラス・クロックフォードのアドバイスは私にとって十分上品だと思います。


2

それはあなたがどのように働いているかに依存する可能性のある個々の質問です。"str_message"のように、変数の型を変数の先頭に置くことを好む人もいます。また、単語の間にアンダースコア( "my_message")を使用することを好む人もいれば、大文字( "myMessage")で区切ることを好む人もいます。

私は他の人たちと一緒に巨大なJavaScriptライブラリを使用することが多いので、関数と変数(関数内のプライベート変数を除く)は、「guestbook_message」のように、競合を避けるためにサービスの名前から始める必要があります。

要するに、私によると、英語の小文字でよく整理された変数名と関数名が望ましいとされています。名前は、短いというよりは、その存在を説明する必要があります。


2
「したがって、関数と変数(関数内のプライベート変数を除く)は、競合を回避するためにサービスの名前から始める必要があります。」このステートメントは不正確です。複数のJavaScriptフレームワークを介してブリードしない「名前空間」関数とオブジェクトを正しく持つことができます。MIX11からこれを達成するためにどのように非常に良いプレゼンテーションがありましたchannel9.msdn.com/Events/MIX/MIX11/OPN08
クリスMarisic
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.