web-dev-qa-db-ja.com

グローバル変数の命名/フォーマット標準

JavaScriptのグローバル変数の命名とフォーマットの両方の標準は何ですか?

例えば:

var global_var // ?
var _global_var // ?
var GLOBAL_VAR // ?
var _GLOBAL_VAR // ?
...

注:私は定数について話しているのではなく、単にグローバルスコープを持つ変数について話しているだけです。

25
StaceyI

そのような基準はありません。最も一般的な方法は、小文字のキャメルケースを使用することです(例:var fooBarBaz;)スコープに関係なく、すべての変数とプロパティ名に対して。ただし、これは決して普遍的ではありません。唯一の例外は、コンストラクターとして使用することを目的とした関数の名前を大文字にすることです。

function SomeClass() {}

var someClassObj = new SomeClass();

また、作成者が定数と見なす変数、またはすべてのグローバル変数に使用されるブロック大文字とアンダースコアも確認しました。

var EARTH_RADIUS = 6378100;

もう1つの合理的に一般的な規則(私が自分で使用するものではありませんが)は、作成者がプライベートと見なしたいオブジェクトのプロパティの前にアンダースコアを付けることです。

this._leaveThisAlone = "Magical property";

Douglas Crockfordが公開しました JavaScriptコード標準に関する彼自身の見解 数年前にこれのほとんどをカバーしていますが、これは相変わらず一人の意見ですので、ちょっと塩を飲んでください。

17
Tim Down

グローバル変数を使用する必要がある場合に設計を再考するために必要なコメント、何とか何とか...

私が見たグローバル変数には、通常、接頭辞gまたはgblが付いています。アンダースコアで変更される場合があります:_g_gbl。 IIRC、アンダースコアは、「グローバル」が「真の」グローバルではなく、ある範囲に限定されている場合に使用されました。

すべてが変数を使用できないようにグローバル変数を使用する場合は、アンダースコアを使用します。 javascript(IIRC)では、プレフィックスとしてアンダースコアを使用するという規則は、変数が「プライベート」であるか、外部で使用されるべきではないことを意味します。または、誰もがアクセスして変更できるように宣言している場合は、プレフィックスのみを使用し、アンダースコアは使用しません。

4
QuinnG

そのようなことをする意図は2つあると思います。

このようなことを行う最初の理由は、特定の時間にグローバルオブジェクト(通常はウィンドウまたはグローバル)にバインドされているグローバル状態変数を検出できるようにすることです。問題は、あなたがどれほど厳格であっても、これに取り組むための実際的な方法は2つしかないということです。 1つは、グローバル変数を作成して名前でグローバル変数を追跡し、グローバルを追加/削除するたびに常に変更することを約束することです。2つ目は、グローバルの初期状態のコピーを保持し、どのプロパティが追加、削除されたかを把握することです。または開始以降に変更されました。

このようなことを行う2番目の理由は、コードで、グローバル状態と意図的に相互作用することを強調することです。この場合、暗黙的に行うのではなく、コメントを追加したり、グローバルオブジェクトを明示的に指定したりするよりも、これを行うことには標準的な利点はほとんどありません。

ファイル間またはプロジェクト間で定数を表す方法を変更することにした場合、コード全体で表記に一貫性がないことには多くの罰があります。選択できる表記法はたくさんありますが、変数名とその自然なアルファベット順を難読化するか、参照のオーバーヘッドを追加することで、いずれも失敗します。

個人的には、疑わしい場合は、 Linuxカーネルコーディングスタイル に固執するのが好きですが、多くの問題に十分に対処できると思います。

Cはスパルタ言語なので、名前を付ける必要があります。 Modula-2やPascalプログラマーとは異なり、CプログラマーはThisVariableIsATemporaryCounterのようなかわいい名前を使用しません。 Cプログラマーは、その変数tmpを呼び出します。これは、書くのがはるかに簡単で、理解するのも難しくありません。

ただし、大文字と小文字が混在する名前は嫌われますが、グローバル変数の説明的な名前は必須です。グローバル関数fooを呼び出すことは、射撃犯罪です。

グローバル変数(本当に必要な場合にのみ使用される)には、グローバル関数と同様に、説明的な名前を付ける必要があります。アクティブユーザーの数をカウントする関数がある場合は、そのcount_active_users()などを呼び出す必要があります。cntusr()は呼び出さないでください。

関数の型を名前にエンコードすること(いわゆるハンガリアン記法)は脳に損傷を与えます-コンパイラーはとにかく型を知っていてそれらをチェックすることができ、プログラマーを混乱させるだけです。マイクロソフトがバグのあるプログラムを作成しているのも不思議ではありません。

LOCAL変数名は短く、要領を得たものにする必要があります。ランダムな整数ループカウンターがある場合は、おそらくiと呼ばれるはずです。誤解される可能性がない場合、loop_counterと呼ぶことは非生産的です。同様に、tmpは、一時的な値を保持するために使用されるほぼすべてのタイプの変数にすることができます。

ローカル変数名を混同することを恐れている場合は、関数-成長-ホルモン-不均衡症候群と呼ばれる別の問題があります。第6章(機能)を参照してください。

0
Dmitry

グローバル変数を使用しないように言われる大きな理由の1つは、他のスクリプトやライブラリへの干渉を避けるためです。

グローバル変数を使用する必要があるときに使用し始めた規則は、姓を追加することです。これにより、ライブラリまたは外部スクリプトのグローバル変数に干渉しないことがわかります。 (私はかなりユニークな姓を持っていますが、あなたがスミスの場合、これは機能しない可能性があります)。

したがって、私のグローバル変数には次の名前が付けられます。

var foo_lastnameGlobal;
var bar_lastnameGlobal;

(明確でない場合に備えて)これは単なる個人的な慣習であり、一般的または広く使用されている慣習ではないことを指摘しておく必要があります。また、グローバル変数を使用するときに、それらが何であるかを思い出すのにも役立ちます。パブリックコードやプロのグループ作業環境ではそれほど良くないかもしれないと思います。

0
Michael S