Javascript'te bu alt çizgi ne anlama geliyor?


85
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();
    },

Burada backbone.js hakkında bir eğitim okuyorum: http://addyosmani.com/blog/building-spas-jquerys-best-friends/

Alt çizgiler nelerdir? (_index, _photos, _album) Neden kullanıyorsunuz?


2
altçizgilerin sözdizimsel bir anlamı yoktur, muhtemelen bu belirli programcı için değişkenlerin türünü belirtmek için bir
kuraldır

Yanıtlar:


164

Özel alanlar veya özel yöntemler anlamına gelir. Yalnızca dahili kullanım için olan yöntemler.

Sınıfın dışında çağrılmamalıdırlar.

Özel alanlar, dahili kullanım için veriler içerir.

Sınıf dışından (doğrudan) okunmamalı veya yazılmamalıdır.

Not: Bir değişkene sadece alt çizgi eklemenin onu özel yapmadığını, sadece bir adlandırma kuralı olduğunu unutmamak çok önemlidir.


4
en azından, özel alanlar fikri var, ancak gerçekten özel değiller, yine de onlara erişebilirsiniz. Yukarıdaki kodun yazarı, yalnızca onların özel olması anlamına geliyordu. bu kadar.
Sander

Harika, buna bakmam neden bu kadar uzun sürdü bilmiyorum! Teşekkürler.
droid-zilla

21

Bildiğim kadarıyla, genellikle özel bir değişkeni belirtmek için kullanılır (ancak aslında herhangi bir gizlilik sağlamaz, yalnızca bir kural).

Burada kısaca tartışılıyor, ancak tavsiye edilmiyorlar : http://javascript.crockford.com/code.html


3
Bağlantıyı beğendim: "Yetkinlik eksikliğini gösteren kurallardan kaçının." :-)
Arek

Bunları özellikle Promises ve diğer eşzamansız şeylerde hata ayıklarken kısayol olarak kullanıyorum. örneğin, nesnemin bazı özelliklerine erişmenin "resmi" yolu olabilir, myObj.getSmePromise().then( function(o) { do stuff } );ancak bu, Chrome konsoluna yazmak çok myObj._someValuezor , bu nedenle "uygun kodun" aslında ona erişmeyeceğini anlamaya karar verdim - ancak bu, Bir sonraki jQuery / lodash / angular / react'i yazıyorsanız ya da tüm kullanıcılarınızın bunu bilmesi ya da saygı duymasına güvenmeyeceğim her şeyi yazıyorsanız, iş arkadaşlarımın da bu kongreyi bilmelerinin lüksü!
FredL

8

_varnameDeğişken adının sadece bir parçası gibi kullanıldığında ve javascript anlamı yoktur. Geliştiriciler, değişkenin anlamını veya kapsamını belirtmek için kullanır. Bu durumda, geliştiriciye bu değişkenin yerel veya özel bir değişken olması gerektiğini söylüyormuş gibi görünüyor.

Unutulmaması gereken birkaç nokta, bu özel örnekte _.varname, alt -core.js kitaplığı ile bir değişken veya işlevi belirtir. Ayrıca _varname, bir alt çizgi nesnesini tutan bir değişkeni belirtmek için de kullanılabilir , benzer şekilde ofisimizde, $varnamebir Jquery nesnesi içeren bir değişkeni belirtmek için kullanırız .


4

Muhtemelen dahili / özel mülkleri işaretlemek için kullanılır. Tıpkı python'da olduğu gibi, bir değişkeni alt çizgi ile önek olarak almak, geliştiricilere bir değişkenin dahili olduğunu ve onu kurcalamamalarının daha iyi olduğunu söylemenin kolay bir yoludur (ve eğer böyle yaparlarsa, ilgili kitaplığın küçük bir güncellemesi bile bazı şeyleri bozabilir).


2

Genellikle _kullanıcıya / programcıya söz konusu özel / korumalı değişken olduğunu söylemek için kullanılır.


0

Bahsedildiği gibi, bu birçok geliştirici arasında bir uygulamadır, bunda kötü. Programlama yöntemlerinizde buna benzer kurallara başvurmanız gerekiyorsa, dili kullanmaya başlamadan önce dili, yöntemleri ve kalıpları öğrenmelisiniz. Birisi "alt çizgi" kullanılmadan kodunuzdaki genel / özel yöntemleri ayırt edemiyorsa, dokümantasyon beceriniz son derece eksiktir. Web'deki kamu projelerinin çoğu çok zayıf bir şekilde belgelenmiştir, bu nedenle "alt çizgi" konvansiyonları, eğitimli geliştiricilerin çoğu tarafından "kabul edildi", diğerleri ise resmi tasarım modellerini ve yöntemlerini korumak yerine akışa devam etmeye karar verdi. ES6 / 7 sürümlerine "alt çizgi" nin yazılmamasının bir nedeni vardır.

Kısa bir süre önce bir blogda bir Yazılım Mühendisi Yöneticisine rastladım: " Alt çizgi adlandırma kuralı, bir değişken işlevin genel mi yoksa özel mi olduğunu bir bakışta anlamayı gerçekten kolaylaştırıyor. " Cevabım şu: "Yorumlar resim gibidir, bu durumda bin alt çizgiye bedeldir.

Doxygen adında ücretsiz bir dokümantasyon aracı var. JavaScript'i özel olarak desteklemese de, yorumlarınızda Doxygen öneklerini kullandığınızda JavaScript uygulamalarınız için profesyonel belgeler oluşturabilir. Kod yorumlarınıza biraz çaba sarf ettiğinizde, hem geliştiriciler hem de kullanıcılar için belgelerle JavaScript uygulamaları oluşturmak gerçekten çok basittir.

Unutmayın, "Üretim Sürümleri" için yorumları ve konsol bildirimlerini kaldırabilen araçlar vardır. Bununla birlikte, kaynak haritaların kullanımı da zaman ve kaynak israfıdır. Yayınlamaya hazır oluncaya kadar küçültmeyin .. ör. Dev Build (küçültme yok, yorumları ve konsol ifadelerini saklayın), Sürüm Derlemesi (yorumları ve konsol bildirimlerini kaldırın ve Geliştirici derlemesini küçültün. Yayınlandığında Dev Derlemesini yeniden derlemeye gerek yok kalite kodu, sadece yayınlanması için hazırlayın ve dağıtın).


2
Bir işlevin kaynak koduna bakmadığınız sürece bir yorum görmezsiniz. Başkasının kitaplığını / kodunu kullanıyorsanız, kaynağı veya belgeleri okumadan yöntemin amacını görebilmek için biraz değer katar. Alt çizgi öneki Imo, güvenilmemesi gereken herkese açık olmayan bir API olduğunu söylüyor.
Sam P

0

Bu küçük bir ek. Daha önce yanıtlandığı gibi, bunlar sözde özel değişkenlerdir. Ancak bu özel değişkenlere erişen sözde genel işlevler yazmak mümkündür.

Buna etkili bir şekilde sahip olan (ancak ayrı bir kitaplıkta çok derine gömülü olan) bir meslektaş kodu beni şaşırttı:

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

Şimdi her ikisine de sahipsiniz y.idve y._idbu iş ve aynı değeri döndürün. Ama yaparsan console.log(y), sadece _idanahtarı gösterir .

görüntü açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.