JSのコードを見ているとアンダースコアから始まる変数名や関数名をよく見かけますが、どのような変数や関数にアンダースコアから始まる名前を付与しているのでしょうか?
公式な文法うんぬんではなく、何か暗黙のルールか作法のようなものがあるように感じます。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答3件
0
ベストアンサー
私の知る限りはプライベート変数、関数にそういう命名をすることが多いです。
JavaScript には言語仕様上のプライベート宣言がないので、値を1つ何か持つとその度に余計なプロパティが際限なく増えていきます。(あくまでライブラリ等の利用者にとって余計な)
これでは利用者に使ってほしいプロパティが埋もれてしまうので、それを防ぐ目的でプライベートであることを表現するため、_xxx という名前を使用しています。
あとは一部 AltJS 系言語がコンパイル結果として吐き出す JavaScript で、予約語やプログラマーが使用する変数との衝突を避けるため (だと思うのですが) に付与しているパターンもありそうです。
(TypeScript のコンパイラが作る _this 変数など)
投稿2015/10/27 00:57
総合スコア790
0
db のカラム名は、アンダースコアで区切った名前が多い。
css はハイフンで区切った名前がある。
java , javascriptはハイフンを名前の一部に使えないが代わりにアンダースコアを使う。
ABC_EFG というdbのカラムがあるとき、dbのカラム名からJAVA のGETTER OR SETTER を特定したい、なんて場合、javaでは、アッパーキャメルケースで変換して、get / set を頭に付ける。
キャメルケースでgetter/setter を定義しない方言もあるので一概には言えないけど、アンダースコアの直後の1文字がアルファベットのとき、その1文字を大文字、残りは全部小文字で、なんて規約にすれば、dbから取得したデータをbean に自動的に突っ込める、これ便利。ABC_1DE とか、アンダースコアの直後が数字の場合はどうすんだ、とか、AB12W とか、数字を含むけど、アンダースコアが名前に入ってないとかの場合はどうすんだ、とか細かいことあるけど、それぞれ適切に対応することで自動化という点でアンダースコア入り文字列とjava の雰囲気を鑑みた相互変換が可能になったりします。暗黙のルールという点ではキャメルケース変換によるコピー、初期化処理は、よくあることです。エクリプスのgetter/setterの変換ルールも、単純に先頭だけ大文字変換あとは触らない、でしたね。キャメルの反対はスネークなんですって。
コンパイラは、定義されている変数名、関数名、の先頭にアンダースコアを1個付けます。なので、リストみるとアンダースコアだらけです。c言語だと、プリプロセッサのキーワードは、アンダースコア2つ前に付けます。付いてないのも一杯あるので一概には言えませんけど。アンダスコアの付き方と文字の大小でコード中のキーワードの分類がやり易そうです。
いぜんのプロジェクトでは、インスタンス変数名の末尾にだけにアンダースコアを付ける独特なルールがあったのでとても萎えました。
getAbcDef()
とかいかにもjava っぽいでしょ。javascript だけやってる人はまず居ないので、それぞれ記述する人の背景にこれまで学んできた言語がアンダースコアの付け方でみえてきたりすると面白いですね。
アンダースコアを変数の末尾に付ける書き方、アセンブラで見たことがありました。c言語が前なんで、cんp変数と区別するためかなぁ。
投稿2015/10/27 08:33
総合スコア1693
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
「_
から始まる名前が private
である」というのは一部のコーディング規約でそのように規定されているだけで全てのコーディング規約がそうなっているわけではありません。
例えば、「Google JavaScript Style Guide」では _
で終わるプロパティを private
と定義しています。
コーディング規約はチームでコーディングする為の「暗黙の了解」ですが、チームによって準ずるコーディング規約も変化します。
一人でコーディングするのであれば自由に書いて構いませんが、一つのコーディング規約に沿ってコードを書けばメンテナンス製の高いコードを期待できます。
"_" で始まる名前を付けても実際に private になっているわけではない
当然の事ながら名前を変えたから自動的に private
になるわけではありません。
Object.defineProperty
で {enumerable: false}
を指定するとか、getter/setter 的にして private
にしなくて済むようにするとか、確実に問題が解消される方法を模索してどうしても解消されない時に暫定対応として命名規約で縛るものだと思います。
"_" な関数
Underscore.js や lodash.js は _
という名前の関数をグローバル空間に持ちますが、質問されているのはそれの事ではないですよね?(違うとは思いますが、念のため)
投稿2015/10/27 05:42
総合スコア18194
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/10/27 05:03
2015/10/27 07:48