Sık sık görüyorum m_
Öğreticilerde, örneklerde ve çoğunlukla oyun geliştirmeyle ilgili diğer kodlarda değişkenler için ( m_World
,, m_Sprites
...) kullanılan ön ekleri .
İnsanlar neden m_
değişkenlere önek ekler ?
Sık sık görüyorum m_
Öğreticilerde, örneklerde ve çoğunlukla oyun geliştirmeyle ilgili diğer kodlarda değişkenler için ( m_World
,, m_Sprites
...) kullanılan ön ekleri .
İnsanlar neden m_
değişkenlere önek ekler ?
m_
, ancak buradaki yanıtların yarısı neden herkesin şu anki favorilerinin en iyisi olduğunu düşündüğüne dair bir yorum.
Yanıtlar:
Bu, üye değişkenler olan değişkenleri tanımlamak için tipik bir programlama uygulamasıdır. Bu yüzden, onları daha sonra kullanırken, kapsamlarını bilmek için nerede tanımlandıklarını görmenize gerek yok. Bu, kapsamı zaten biliyorsanız ve intelliSense gibi bir şey kullanıyorsanız , ile başlayabilirsiniz m_
ve tüm üye değişkenlerinizin bir listesi gösterilir. Macar notasyonunun bir kısmı, buradaki örneklerde kapsamla ilgili kısma bakın .
m_
her ikisinin de önekli üye değişkenleri oluşturmasını gerçekten zorlayamazsınız .
In Temiz Kodu: Çevik Yazılım El Sanatları isimli Elkitabı bu önek kullanımı karşı açık bir öneri yoktur:
Ayrıca
m_
artık üye değişkenlerine önek eklemenize de gerek yok. Sınıflarınız ve işlevleriniz, onlara ihtiyacınız olmayacak kadar küçük olmalıdır.
Bunun bir örneği (C # kodu) da vardır:
Kötü uygulama:
public class Part
{
private String m_dsc; // The textual description
void SetName(string name)
{
m_dsc = name;
}
}
İyi pratik:
public class Part
{
private String description;
void SetDescription(string description)
{
this.description = description;
}
}
Biz açıkça belirsizlik (durumunda üye değişkenleri başvurmak için dil yapıları ile saymak yani , description
üye ve description
parametre): this
.
C ++ 'da yaygın bir uygulamadır. Bunun nedeni, C ++ 'da üye işlevi ve üye değişkeni için aynı ada sahip olamamanız ve alıcı işlevlerin genellikle "get" öneki olmadan adlandırılmasıdır.
class Person
{
public:
std::string name() const;
private:
std::string name; // This would lead to a compilation error.
std::string m_name; // OK.
};
main.cpp:9:19: error: duplicate member 'name' std::string name; ^ main.cpp:6:19: note: previous declaration is here std::string name() const; ^ 1 error generated.
"Üye" için "m_" durumu. "_" Öneki de yaygındır.
Farklı kurallar / dilbilgisi kullanarak bu sorunu çözen programlama dillerinde kullanmamalısınız.
m_
Önek genellikle üye değişkenler için kullanılır - Ben onun ana avantajı bir kamu mallarının ve özel üye değişkeni destek o arasında kesin bir ayrım oluşturmaya yardımcı olduğunu düşünüyorum:
int m_something
public int Something => this.m_something;
Yedek değişkenler için tutarlı bir adlandırma kuralına sahip olmaya yardımcı olabilir ve m_
önek, bunu yapmanın bir yoludur - büyük / küçük harfe duyarlı olmayan dillerde çalışan bir yöntemdir.
Bunun ne kadar yararlı olduğu, kullandığınız dillere ve araçlara bağlıdır. Güçlü yeniden düzenleme araçlarına ve intellisense'e sahip modern IDE'lerin bunun gibi kurallara daha az ihtiyacı vardır ve kesinlikle bunu yapmanın tek yolu bu değildir, ancak her durumda uygulamanın farkında olmaya değer.
this.
Kendi dilinizde yazmanız gerekiyorsa, o m_
zaman gerçekten işe yaramaz.
m_
, onu desteklediği mülkten ayırmaktır - yani this.Something
mülk this.m_something
ve destekleyici üye için. Bu, kendimi tercih ettiğim bir kongre değil, ancak çoğunlukla büyük / küçük harfe duyarlı olmayan dillerde (VB gibi) kullanıldığını gördüm.
this.Something
mülk this.something
için ve destek için olmasın ? Veya this._something
destek için? this.m_something
gereksizdir. Kullandığım _something
ben yazmaya gittiğimde kaza onu yazmayın böylece Something
membershipness ile ya da değil yapmak, hiçbir şey
_
kendi başına bir önek işi halledebilirdi, ama m_
kuraldır. Kişisel olarak kullanacağım bir şey değil, ama kodda görürseniz yazarın amacı buydu.
Diğer cevaplarda da belirtildiği gibi m_
önek, bir değişkenin sınıf üyesi olduğunu belirtmek için kullanılır. Bu, Macar gösteriminden farklıdır çünkü değişkenin türünü değil, içeriğini gösterir.
m_
C ++ 'da kullanıyorum , ancak' bu 'veya' kendinin 'zorunlu olduğu diğer bazı dillerde kullanmıyorum . Kodu karıştırdığı için 'this->' nin C ++ ile kullanıldığını görmekten hoşlanmıyorum.
Başka bir cevap diyor m_dsc
da "kötü uygulama" ve "açıklama" dır; "iyi bir uygulama" ama bu bir kırmızı ringa balığı çünkü sorun kısaltmadır.
Başka bir cevap, yazmanın this
IntelliSense'i açtığını söylüyor, ancak herhangi bir iyi IDE'nin mevcut sınıf üyeleri için IntelliSense'i açmak için bir kısayol tuşu olacak.
m_description
vs olacaktır description
.
Lockheed Martin, özellikle başkalarının kodunu okurken birlikte çalışması harika olan 3 önekli bir adlandırma şeması kullanıyor.
Scope Reference Type(*Case-by-Case) Type
member m pointer p integer n
argument a reference r short n
local l float f
double f
boolean b
Yani...
int A::methodCall(float af_Argument1, int* apn_Arg2)
{
lpn_Temp = apn_Arg2;
mpf_Oops = lpn_Temp; // Here I can see I made a mistake, I should not assign an int* to a float*
}
Değeri ne olursa olsun al.
Diğer birçok yanıtta belirtildiği gibi, m_, üye değişkenleri belirten bir önektir. C ++ dünyasında yaygın olarak kullanılır / kullanıldı ve Java dahil diğer dillere de yayıldı.
Modern bir IDE'de, sözdizimi vurgulaması, hangi değişkenlerin yerel ve hangilerinin üye olduğunu açıkça ortaya koyduğundan, tamamen gereksizdir . Bununla birlikte, sözdizimi vurgulaması 90'ların sonlarında ortaya çıktığında, sözleşme uzun yıllardır ortalıktaydı ve sağlam bir şekilde ayarlandı (en azından C ++ dünyasında).
Hangi öğreticilere atıfta bulunduğunuzu bilmiyorum, ancak iki faktörden biri nedeniyle kuralları kullandıklarını tahmin edeceğim:
Mevcut cevapları tamamlamak için ve soru dile özgü olmadığından, bazı C-projeleri m_
, bir dosyaya özgü g_
genel değişkenleri ve tanımlandıkları dosyadan daha büyük kapsamı olan genel değişkenleri tanımlamak için öneki kullanır .
Bu durumda önek ile tanımlanan global değişkenler m_
olarak tanımlanmalıdır static
.
Bkz EDK2 (UEFI Açık Kaynak uygulaması) kodlama kongre bu kuralını kullanarak projenin bir örnek için.