web-dev-qa-db-ja.com

Javascriptでは、このアンダースコアは何を意味しますか?

var Gallery = Backbone.Controller.extend({
    _index: null,
    _photos: null,
    _album :null,
    _subalbums:null,
    _subphotos:null,
    _data:null,
    _photosview:null,
    _currentsub:null,
    routes: {
        "": "index",
        "subalbum/:id": "subindex",
        "subalbum/:id/" : "directphoto",
        "subalbum/:id/:num" : "hashphoto"
    },
    initialize: function(options) {
        var ws = this;
        if (this._index === null){
            $.ajax({
                url: 'data/album1.json',
                dataType: 'json',
                data: {},
                success: function(data) {
                    ws._data = data;
                    ws._photos =
                    new PhotoCollection(data);
                    ws._index =
                    new IndexView({model: ws._photos});
                    Backbone.history.loadUrl();
                }
            });
            return this;
        }
        return this;
    },
    //Handle rendering the initial view for the
    //application
    index: function() {
        this._index.render();
    },

私はここでbackbone.jsのチュートリアルを読んでいます: http://addyosmani.com/blog/building-spas-jquerys-best-friends/

アンダースコアとは何ですか? (_index、_photos、_album)なぜそれらを使用するのですか?

79
TIMEX

プライベートフィールドまたはプライベートメソッドを意味します。内部使用専用のメソッド。

クラスの外部で呼び出さないでください。

プライベートフィールドには、内部で使用するデータが含まれています。

クラスの外部から(直接)読み取ったり、書き込んだりしないでください。

変数にアンダースコアを追加するだけではプライベートにならず、命名規則にすぎないことに注意することが非常に重要です。

148
DrStrangeLove

私が知る限り、一般にプライベート変数を示すために使用されます(ただし、実際にはプライバシーを提供するものではなく、単なる慣習です)。

ここでは簡単に説明しますが、次のことは避けてください: http://javascript.crockford.com/code.html

21
oli

_varnameのように使用すると、変数名の一部にすぎず、javascriptの意味はありません。開発者はこれを使用して、変数の意味または範囲を示します。この場合、この変数はローカル変数またはプライベート変数であることを開発者に伝えているように見えます。

注意すべきいくつかの点は、_.varnameを使用するこの特定の例では、underscore.jsライブラリーを使用して変数または関数を意味します。また、_varnameを使用してアンダースコアオブジェクトを保持する変数を表すことができます。同様に、オフィスでは、$varnameを使用してJqueryオブジェクトを含む変数を表します。

8
Ryan Gibbons

内部/プライベートプロパティをマークするためにおそらく使用されます。 pythonのように変数にアンダースコアを付けると、変数が内部変数であり、改ざんしないほうがよいという簡単な方法です(そうする場合は、関係するライブラリが問題を引き起こす可能性があります)。

4
ThiefMaster

通常、_は、問題のプライベート/保護された変数であることをユーザー/プログラマーに伝えるために使用されます。

2
Jan Dragsbaek

これはわずかな補遺です。すでに答えたように、これらは疑似プライベート変数です。ただし、これらのプライベート変数にアクセスする疑似パブリック関数を作成することは可能です。

これを効果的に持っている同僚のコードに混乱しました(ただし、別のライブラリに非常に深く埋まっています)。

_class x { 
  constructor(id) {this._id = id} 
  get id() {return this._id}
}
let y = new x(3)
_

これで、_y.id_と_y._id_の両方が機能し、同じ値を返します。ただし、console.log(y)を実行すると、__id_キーのみが表示されます。

enter image description here

0
icc97

前述のように、これは多くの開発者の間で行われていることであり、悪いことです。プログラミング方法でこのような規則に頼る必要がある場合は、言語を使用する前に、言語、方法、およびパターンを学習する必要があります。 「アンダースコア」を使用せずにコード内のパブリックメソッドとプライベートメソッドを区別できない場合、ドキュメント作成スキルは非常に不足しています。ウェブ上の公開プロジェクトの多くは非常に不十分に文書化されており、おそらく「アンダースコア」の慣習が教育を受けたほとんどの開発者によって「受け入れられた」のに対して、他の人は正式な設計パターンと方法を維持するのではなく、フローを採​​用することを決めたのでしょう。 「アンダースコア」がES6/7バージョンに書き込まれなかった理由があります。

最近ブログで、ソフトウェアエンジニアマネージャーに出会いました。「アンダースコアの命名規則により、変数関数がパブリックであるかプライベートであるかが一目でわかります。 " 。私の応答は次のとおりです。「コメントは写真のようなものです。この場合、コメントは数千アンダースコアの価値があります。

Doxygenと呼ばれる無料のドキュメントツールがあります。 JavaScriptを特にサポートしていませんが、コメントでDoxygenプレフィックスを使用すると、JavaScriptアプリケーションの専門的なドキュメントを生成できます。開発者とユーザーの両方がコードコメントに少し努力を払えば、ドキュメントを使用してJavaScriptアプリケーションを作成するのは本当に簡単です。

コメントを削除できるツールと、「Production Releases」のコンソールステートメントがあることを忘れないでください。そうは言っても、ソースマップの使用は時間とリソースの浪費でもあります。パブリッシュする準備が整うまで縮小しないでください。つまり、Dev Build(縮小、コメントとコンソールステートメントの保持)、Release Build(コメント、コンソールステートメントの削除、Devビルドの縮小。リリース時にDevビルドを再コンパイルする必要はありません。品質の高いコードは、リリースの準備とデプロイを行うだけです)。

0
BeosFreak